この記事は、Python でのファイル操作に関する関連内容をまとめたものです (例付き)。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
1. ファイル操作の概要
ファイル操作といえば必ずストリームを思い浮かべますが、ファイル操作はすべてストリームを通じて実行されます。 Python でのファイルの操作は非常にシンプルで、さまざまなストリーム操作がある Java などの他の言語とは異なり、open 関数を直接使用してファイルを開いてさまざまな操作を行うことができます。 , 実行できる操作も異なります。ファイルを開く方法は、r、 w、a、r、w、a、rb、wb、ab、r b、w b、a b など。
まず、ファイルの読み取り操作を見てみましょう:
In [2]: f = open(file='a.txt', mode='r', encoding='utf-8') In [3]: f.read() Out[3]: '每天坚持一点,\n每天努力一点,\n每天多思考一点,\n慢慢你会发现,\n你的进步越来越大\n' In [4]:
open 関数を使用してファイルを開き、ファイル オブジェクトを返します。open 関数のいくつかの共通パラメータは、file (ファイルの名前) です。 )、モード (どのモードで開くか)、エンコーディング (ファイルを読み取るエンコーディングを指定)、モードに応じて、返されたファイルにはさまざまな操作が行われます。ファイルに対するいくつかの操作を見てみましょう。
2. ファイルを操作するいくつかの方法
(1) 読み取り専用操作
読み取り専用操作の場合は、mode を r に指定するだけです。
In [5]: f = open(file='a.txt', mode='r', encoding='utf-8') In [6]: f.read() Out[6]: '每天坚持一点,\n每天努力一点,\n每天多思考一点,\n慢慢你会发现,\n你的进步越来越大\n' In [7]: f.readable() # 判断文件是否可读 Out[7]: True In [8]: f.writable() # 判断文件是否可写 Out[8]: False # 此处是以只读模式打开的文件,所以返回False不可写 In [9]: f1 = open(file='单分支结构.eddx', mode='rb') # 使用‘rb’可以打开存储为二进制的数据,图片、视频等 In [10]: f1.read(20) Out[10]: b'PK\x03\x04\x14\x00\x08\x00\x08\x00mN\xe3H\xa9\x95\xb3\x9eW\x01'
(2) 書き込み専用操作
mode='w'
In [13]: f = open(file='a.txt', mode='w', encoding='utf-8') In [14]: f.read() # 此时尝试读取文件会报错 --------------------------------------------------------------------------- UnsupportedOperation Traceback (most recent call last) <ipython-input-14-571e9fb02258> in <module> ----> 1 f.read() UnsupportedOperation: not readable In [15]: f.write('葫芦娃') Out[15]: 3 In [16]: f.close() In [17]: !cat a.txt # 此时查看文件之前那的内容已经被覆盖了 葫芦娃 In [18]:
mode='w'を使用してファイルを操作する場合、ファイルは最初にクリアされます。ファイルを開くときに、操作に従って内容がファイルに書き込まれます。読み取り専用モードには次の特徴があります。
ファイルが存在しない場合、ファイルは
ファイルを開くと、ファイルの内容が最初にクリアされ、最初から書き込まれます
ファイルは書き込み専用モードで開かれているため、読み取ることができません
(3) 追加操作
mode='a'
In [18]: f = open(file='a.txt', mode='a', encoding='utf-8') In [19]: f.write('每天坚持一点,\n每天努力一点,\n每天多思考一点,\n慢慢你会发现,\n你的进步越来越大\n') Out[19]: 42 In [20]: f.close() In [21]: In [21]: !cat a.txt 葫芦娃每天坚持一点, 每天努力一点, 每天多思考一点, 慢慢你会发现, 你的进步越来越大 In [22]:
追加モード操作:
ファイルを開く ファイルが存在しない場合は、最初にファイルが作成されます
ファイルにコンテンツを書き込むとき、 はカーソルの位置に関係なく、常にファイルの最後に書き込まれます。
r モードは拡張読み取り操作です。つまり、読み取りと書き込みが可能です。
In [22]: f = open(file='a.txt', mode='r+', encoding='utf-8') In [23]: f.readable() Out[23]: True In [24]: f.writable() Out[24]: True In [25]: f.read() Out[25]: '葫芦娃每天坚持一点,\n每天努力一点,\n每天多思考一点,\n慢慢你会发现,\n你的进步越来越大\n' In [26]: f.write('\n哈哈哈哈哈哈哈') Out[26]: 8 In [27]: f.close() In [28]: !cat a.txt # 查看写入的文件并没有异常 葫芦娃每天坚持一点, 每天努力一点, 每天多思考一点, 慢慢你会发现, 你的进步越来越大 哈哈哈哈哈哈哈 In [29]: f = open(file='a.txt', mode='r+', encoding='utf-8') In [30]: f.seek(0, 2) # seek可以调整光标位置 Out[30]: 153 In [31]: f.write('你的进步越来越大') Out[31]: 8 In [32]: f.read() # 先写后读会读出空字符 Out[32]: '' In [33]:概要: 拡張された読み取り操作ではファイルの読み取りと書き込みができますが、順序は最初に読み取り、次に書き込みを行う必要があります。最初に読み取り、次に書き込みを行うと、書き込みと読み取りの際に空の文字列を読み取る可能性があります #r モードです。ご注意ください。r モードでは、コンテンツを読み込むと、コンテンツをどれだけ読み取っても、カーソルが表示されます。どれだけ読み込んだかを示します。ファイルの書き込みや操作の際、操作は最後に実行されます
(5)w とモード
w モードとモードは次のとおりです 実際の使用シナリオはほとんどありません。ここでは簡単に説明します:
#w: 強化された w モード。書き込みと読み取りの操作が可能ですが、r と同じです。最初に読み取り、次に書き込みを行うと、操作中および毎回の落とし穴があります。ファイルが開かれると、ファイルが最初にクリアされるため、使用シナリオが少なくなります。# #3. ファイル操作方法
(1) ファイルの読み込みと書き込み
ファイルの書き込み: 主に write メソッドと writelines メソッド
write メソッド: 文字列を直接書き込むだけです。上記の例では
writelines メソッドも使用しています: 渡されたパラメータは必要に応じて反復できます (リストやタプルなど) .)
read メソッド: read メソッドは、ファイルの数を示す int 型パラメータを受け取ります。文字は一度に読み取られます (シークの単位はバイトです)。指定しない場合、デフォルトではファイルのすべての内容が読み取られます。
readline メソッド: ファイルの 1 行を読み取ります。 file の場合、このメソッドは、ファイルが非常に大きく、ファイル全体が一度に読み取られない場合に非常に便利です。
readlines メソッド: ファイル全体を読み取り、次の条件でリストに分割します。 List
In [34]: f = open(file='a.txt', mode='r', encoding='utf-8') # 葫芦娃每天坚持一点, # 每天努力一点, # 每天多思考一点, # 慢慢你会发现, # 你的进步越来越大 # 哈哈哈哈哈哈哈你的进步越来越大 In [35]: f.read(10) # 这里时一次读取10个字符 Out[35]: '葫芦娃每天坚持一点,' In [36]: f.readline() Out[36]: '\n' In [37]: f.readline() # 每次读取一行 Out[37]: '每天努力一点,\n' In [38]: f.readlines() # 返回的是一个列表 Out[38]: ['每天多思考一点,\n', '慢慢你会发现,\n', '你的进步越来越大\n', '\n', '哈哈哈哈哈哈哈你的进步越来越大'] In [39]:
readline (ファイル ハンドル) と readlines の違い
readlines によって返される結果はリストです。ファイル全体の内容を一度に読み取ります。大きなファイルを処理すると、大量のリソースが消費されます。
ループを使用してファイル ハンドルを走査し、ファイルの内容を出力することもできます:
In [39]: f.seek(0) Out[39]: 0 In [40]: for line in f: ...: print(line.strip()) 葫芦娃每天坚持一点, 每天努力一点, 每天多思考一点, 慢慢你会发现, 你的进步越来越大 哈哈哈哈哈哈哈你的进步越来越大 In [41]:
(2) その他のファイル操作方法
close: ファイルを閉じる
readable: ファイルが読み取り可能かどうかの判定
seek: カーソルを移動して 2 つのデータを受信します。最初のパラメータはオフセット位置を示します (移動の単位はバイトです。したがって、UTF-8 の中国語部分の場合は倍数でなければなりません) 2 番目のパラメータは、その位置からのオフセットを示します (0 は開始を表し、1 は現在位置を表し、2 は終了を表します)
seekable:判断当前文件的光标是否可移动
tell:返回当前光标所在的位置
truncate:截断数据(谨慎操作),默认截断光标后所有字符
writable:判断文件是否可写
(3)打开文件的另一种方式
在打开一个文件后,要记得在文件使用结束狗使用close方法关闭文件句柄,但有时在中间进行大量的操作后可能会忘了关闭,下面介绍的这种方法可以不用自己手动关闭文件了,他会在您操作解说后(代码块的语句执行完毕)自动关闭文件句柄,这种方法就是使用context上下文管理,使用with语句实现:
In [43]: with open('a.txt', mode='r', encoding='utf-8') as f: # 使用with管理上下文,最后退出时会自己执行close动作 ...: for line in f: ...: print(line.strip()) 葫芦娃每天坚持一点, 每天努力一点, 每天多思考一点, 慢慢你会发现, 你的进步越来越大 哈哈哈哈哈哈哈你的进步越来越大
以上がPythonでのファイル操作関連内容のまとめ(例あり)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。