ホームページ >バックエンド開発 >Python チュートリアル >Pythonファイルの読み書き操作を詳しく解説
1.open
open を使用してファイルを開いた後、忘れずにファイル オブジェクトの close() メソッドを呼び出す必要があります。たとえば、try/finally ステートメントを使用すると、ファイルを最終的に閉じることができるようになります。
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
注: open ステートメントを try ブロックに置くことはできませんファイルを開くときに例外が発生すると、ファイル オブジェクト file_object は close() メソッドを実行できないためです。
2. ファイルの読み取り
テキスト ファイルの読み取り
input = open('data', 'r')
#2 番目のパラメータのデフォルトは r
input = open('data')
バイナリ読み取りfile
input = open('data', 'rb')
すべての内容を読む
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally :
file_object.close()チャンクでない場合:
Break
do_something_with (chunk)
finally:
file_object.close ()
1 行ごとに読み取り
ファイルがテキスト ファイルの場合は、ファイル オブジェクトを直接トラバースして次のことを行うこともできます。各行を取得:
for line in file_object:
プロセス行
3. ファイルの書き込み
テキストファイルの書き込み
output = open('data', 'w')
バイナリファイルの書き込み
output = open('data', 'wb')
書き込みファイルを追加
output = open('data', 'w+')
データを書き込み
file_object = open('thefile.txt ', 'w')
file_object.write(all_the_text)
file_object.close( )
複数行を書き込みます
file_object.writelines(list_of_text_strings)
writelines を呼び出すと、複数行を書き込む方がパフォーマンスが高くなります。 write を使用して一度に書き込みます。
ログ ファイルを処理するとき、ログ ファイルが巨大で、一度にファイル全体をメモリに読み込んで処理することができない、たとえば、 2GB の物理メモリの場合、一度に処理できるのはその内容の 200MB のみです。
Python では、組み込みの File オブジェクトが、このようなことを実現するための readlines(sizehint) 関数を直接提供します。次のコードを例に挙げます:
file = open('test.log', 'r')sizehint = 209715200 # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - Position
readlines(sizehint) 関数が呼び出されるたびに、約 200MB のデータが返され、ほとんどの場合、返されるデータは完全な行データである必要があります。 、戻り値のデータのバイト数は、sizehint で指定された値よりわずかに大きくなります (readlines(sizehint) 関数が最後に呼び出された場合を除く)。通常、Python はユーザー指定の sizehint 値を内部キャッシュ サイズの整数倍に自動的に調整します。
file は Python の特別なタイプで、Python プログラムで外部ファイルを操作するために使用されます。 Python ではすべてがオブジェクトであり、ファイルも例外ではありません。ファイル メソッドと属性があります。まず、ファイル オブジェクトの作成方法を見てみましょう:
file(name[, mode[,buffering]])
file() 関数は、ファイル オブジェクトを作成するために使用されます。これには、open() というエイリアスがあります。より鮮明に、これらは組み込み関数です。そのパラメータを見てみましょう。そのパラメータはすべて文字列の形式で渡されます。 name はファイルの名前です。
mode はオープン モードで、オプションの値は r wa a U で、それぞれ読み取り (デフォルト) と書き込みのさまざまな改行をサポートするモードを表します。 w または a モードでファイルを開く場合、ファイルが存在しない場合は自動的に作成されます。また、w モードを使用して既存のファイルを開く場合、初期ファイル操作マークがファイルの先頭にあるため、この時点で書き込み操作を実行すると、元のファイルの内容は消去されます。間違いなく削除されます。歴史的な理由により、改行文字にはシステムごとに異なるモードがあります。たとえば、Unix では n ですが、Windows では、U モードでファイルを開くと、すべての改行モードがサポートされます。これは ' を意味します。 r' 'n' 'rn' はすべて改行を表すことができ、このファイルで使用される改行文字を格納するために使用されるタプルがあります。ただし、改行にはさまざまなモードがありますが、Python で読み取る場合は代わりに n が使用されます。モード文字の後に、2 つの記号 + b t を追加することもできます。これらは、それぞれ、ファイルの読み取りと書き込みを同時に行うことができ、ファイルをバイナリ モードまたはテキスト モード (デフォルト) で開くことができることを示します。
buffering 0 の場合はバッファリングなしを意味し、1 の場合は「行バッファリング」を意味し、1 より大きい数値の場合はバッファーのサイズを意味します (バイト単位である必要があります)。
ファイル オブジェクトには独自のプロパティとメソッドがあります。まずはファイルの属性を見てみましょう。
closed #ファイルが閉じられたかどうかをマークし、close()で書き換えます
encoding #ファイルエンコード
mode #オープンモード
name #ファイル名
newlines #ファイルで使用される改行モードはタプルです
ソフトスペース #boolean 型 (通常は 0) は、読み取りと書き込みに使用されると言われています print
file: F.read([size]) #size は読み取りの長さ (バイト単位) です F.readline( [ size]) # size が定義されている場合は行の一部のみを返すことができます F.readlines([size]) # ファイルの各行を次のメンバーとして扱いますリストを返し、このリストを返します。実際、これはループ内で readline() を呼び出すことによって内部的に実装されます。 size パラメータが指定されている場合、size は読み取られるコンテンツの全長を表します。これは、ファイルの一部のみが読み取られることを意味します。 F.write(str) #str をファイルに書き込みます。write() は str の後に改行文字を追加しません F.writelines(seq) #seq の内容をすべてファイルに書き込みます。この関数も、各行の後に何も追加せずに、忠実に記述するだけです。 ファイルのその他のメソッド: F.close() #ファイルを閉じます。 Python は、使用されなくなったファイルを自動的に閉じますが、この機能は保証されていません。自分でファイルを閉じる習慣を身に付けることをお勧めします。ファイルを閉じた後にファイルを操作すると、ValueError が生成されます F.flush() #バッファの内容をハードディスクに書き込みます F.fileno() #long 整数を返します「file」タグ「F.isatty() #ファイルが端末デバイスファイルかどうか(UNIXシステムの場合) F.tell() #ファイル操作マークの現在位置を返すファイルの先頭を起点にF.next() #次の行に戻り、ファイル操作フラグを次の行に移動します。ファイルが for ... in file などのステートメントで使用される場合、トラバーサルを実装するために next() 関数が呼び出されます。 F.seek(offset[,whence]) #ファイル操作マークをオフセット位置に移動します。このオフセットは通常、ファイルの先頭を基準にして計算され、通常は正の数になります。ただし、whence パラメーターが指定されている場合は、この限りではありません。whence を 0 にすると最初から計算を開始し、1 を指定すると現在の位置を原点として使用できます。 2はファイルの末尾を起点として計算することを示します。ファイルを a または a+ モードで開いた場合、書き込み操作が実行されるたびに、ファイル操作マークは自動的にファイルの末尾に戻ることに注意してください。 F.truncate([size]) #指定されたサイズにファイルをカットします。デフォルトでは、現在のファイル操作マークの位置までカットされます。サイズがファイル サイズより大きい場合、システムによっては、ファイルが変更されないか、対応するサイズまでファイルが 0 でパディングされるか、ランダムなコンテンツが追加されることがあります。