Python ファイル I/O
Python ファイル I/O
このチュートリアルでは、Python ファイル操作について学習します。より具体的には、ファイルを開く、ファイルから読み取る、ファイルに書き込む、ファイルを閉じる、および知っておくべきさまざまなファイル メソッドです。
ビデオ:Python でのファイルの読み取りと書き込み
ファイル
ファイルは、関連情報を保存するディスク上の名前付きの場所です。データを不揮発性メモリ (ハードディスクなど) に永続的に保存するために使用されます。
ランダム アクセス メモリ (RAM) は揮発性であるため (コンピューターの電源を切るとデータが失われます)、ファイルを永続的に保存することで、将来のデータの使用に備えてファイルを使用します。
ファイルを読み書きするときは、まずファイルを開く必要があります。完了したら、ファイルに関連付けられているリソースを解放するために、ファイルを閉じる必要があります。
したがって、Python では、ファイル操作は次の順序で行われます:
<オール>Python でファイルを開く
Python には open()
が組み込まれています ファイルを開く機能。この関数は、ハンドルとも呼ばれるファイル オブジェクトを返します。これは、ファイルの読み取りまたは変更に使用されるためです。
>>> f = open("test.txt") # open file in current directory
>>> f = open("C:/Python38/README.txt") # specifying full path
ファイルを開くときにモードを指定できます。モードでは、r
を読み取るかどうかを指定します 、 w
と書く または a
を追加 ファイルに。ファイルをテキスト モードで開くか、バイナリ モードで開くかを指定することもできます。
デフォルトはテキスト モードでの読み取りです。このモードでは、ファイルから読み取るときに文字列を取得します。
一方、バイナリ モードはバイトを返します。これは、画像や実行可能ファイルなどの非テキスト ファイルを処理するときに使用するモードです。
モード | 説明 |
---|---|
r | 読み取り用にファイルを開きます。 (デフォルト) |
w | 書き込み用にファイルを開きます。存在しない場合は新しいファイルを作成し、存在する場合はファイルを切り捨てます。 |
x | 排他的な作成のためにファイルを開きます。ファイルが既に存在する場合、操作は失敗します。 |
a | ファイルを切り捨てずに、ファイルの末尾に追加するためにファイルを開きます。存在しない場合は新しいファイルを作成します。 |
t | テキスト モードで開きます。 (デフォルト) |
b | バイナリ モードで開きます。 |
+ | 更新 (読み取りと書き込み) のためにファイルを開きます |
f = open("test.txt") # equivalent to 'r' or 'rt'
f = open("test.txt",'w') # write in text mode
f = open("img.bmp",'r+b') # read and write in binary mode
他の言語とは異なり、文字 a
ASCII
を使用してエンコードされるまで、数値 97 を暗示しません。 (または他の同等のエンコーディング)
さらに、デフォルトのエンコーディングはプラットフォームに依存します。 Windows では、cp1252
です。 しかし utf-8
したがって、デフォルトのエンコーディングにも依存してはなりません。そうしないと、コードが異なるプラットフォームで異なる動作をすることになります。
したがって、テキスト モードでファイルを操作する場合は、エンコード タイプを指定することを強くお勧めします。
f = open("test.txt", mode='r', encoding='utf-8')
Python でファイルを閉じる
ファイルに対する操作の実行が完了したら、ファイルを適切に閉じる必要があります。
ファイルを閉じると、ファイルに関連付けられていたリソースが解放されます。 close()
を使用して行われます メソッドは Python で利用できます。
Python には、参照されていないオブジェクトをクリーンアップするためのガベージ コレクターがありますが、ファイルを閉じるためにガベージ コレクターに依存してはなりません。
f = open("test.txt", encoding = 'utf-8')
# perform file operations
f.close()
この方法は完全に安全というわけではありません。ファイルで何らかの操作を実行しているときに例外が発生した場合、コードはファイルを閉じずに終了します。
より安全な方法は、try...finally ブロックを使用することです。
try:
f = open("test.txt", encoding = 'utf-8')
# perform file operations
finally:
f.close()
このようにして、例外が発生してプログラム フローが停止した場合でも、ファイルが適切に閉じられることが保証されます。
ファイルを閉じる最良の方法は、with
を使用することです。 声明。これにより、 with
内のブロックが閉じられたときにファイルが閉じられます。
close()
を明示的に呼び出す必要はありません 方法。内部で行われます。
with open("test.txt", encoding = 'utf-8') as f:
# perform file operations
Python でのファイルへの書き込み
Python でファイルに書き込むには、write w
で開く必要があります。 、 a
を追加 または排他的な作成 x
モード。
w
には注意が必要です ファイルが既に存在する場合はファイルに上書きされるためです。これにより、以前のデータはすべて消去されます。
文字列または一連のバイト (バイナリ ファイルの場合) の書き込みは、write()
を使用して行われます。 方法。このメソッドは、ファイルに書き込まれた文字数を返します。
with open("test.txt",'w',encoding = 'utf-8') as f:
f.write("my first file\n")
f.write("This file\n\n")
f.write("contains three lines\n")
このプログラムは test.txt
という名前の新しいファイルを作成します 存在しない場合は、現在のディレクトリに。存在する場合は上書きされます。
異なる行を区別するために、改行文字を自分で含める必要があります。
Python でのファイルの読み取り
Python でファイルを読み取るには、読み取り r
でファイルを開く必要があります。 モード。
この目的のために利用できるさまざまな方法があります。 read(size)
を使用できます size を読み込むメソッド データ数。 サイズの場合 パラメータが指定されていない場合、ファイルの最後まで読み取って返します。
text.txt
を読み取ることができます 上記のセクションで次のように記述したファイル:
>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4) # read the first 4 data
'This'
>>> f.read(4) # read the next 4 data
' is '
>>> f.read() # read in the rest till end of file
'my first file\nThis file\ncontains three lines\n'
>>> f.read() # further reading returns empty sting
''
read()
が メソッドは '\n'
として改行を返します .ファイルの終わりに到達すると、さらに読み取ると空の文字列が得られます。
seek()
を使用して、現在のファイル カーソル (位置) を変更できます。 方法。同様に、tell()
メソッドは現在の位置を (バイト数で) 返します。
>>> f.tell() # get the current file position
56
>>> f.seek(0) # bring file cursor to initial position
0
>>> print(f.read()) # read the entire file
This is my first file
This file
contains three lines
for ループを使用して、ファイルを 1 行ずつ読み取ることができます。これは効率的かつ高速です。
>>> for line in f:
... print(line, end = '')
...
This is my first file
This file
contains three lines
このプログラムでは、ファイル自体の行に改行文字 \n
が含まれています。 .したがって、print()
の end パラメータを使用します。 印刷時に 2 つの改行を回避する関数。
または、 readline()
を使用できます ファイルの個々の行を読み取るメソッド。このメソッドは、改行文字を含む改行までファイルを読み取ります。
>>> f.readline()
'This is my first file\n'
>>> f.readline()
'This file\n'
>>> f.readline()
'contains three lines\n'
>>> f.readline()
''
最後に、readlines()
メソッドは、ファイル全体の残りの行のリストを返します。これらの読み取りメソッドはすべて、ファイルの終わり (EOF) に達すると空の値を返します。
>>> f.readlines()
['This is my first file\n', 'This file\n', 'contains three lines\n']
Python ファイル メソッド
ファイル オブジェクトで使用できるさまざまなメソッドがあります。それらのいくつかは上記の例で使用されています.
テキスト モードのメソッドの完全なリストと簡単な説明を以下に示します:
メソッド | 説明 |
---|---|
close() | 開いているファイルを閉じます。ファイルが既に閉じられている場合は効果がありません。 |
detach() | 基になるバイナリ バッファを TextIOBase から分離します |
fileno() | ファイルの整数 (ファイル記述子) を返します。 |
flush() | ファイル ストリームの書き込みバッファをフラッシュします。 |
isatty() | True を返します ファイル ストリームがインタラクティブな場合。 |
read(n ) | 最大 n 読み取り ファイルからの文字。負数または None の場合、ファイルの最後まで読み取ります . |
readable() | True を返します ファイル ストリームを読み取ることができる場合。 |
readline(n =-1) | ファイルから 1 行を読み取って返します。最大 n を読み込みます 指定されている場合はバイト。 |
readlines(n =-1) | ファイルから行のリストを読み取って返します。最大 n を読み込みます バイト/文字が指定されている場合。 |
seek(オフセット ,から =SEEK_SET ) | ファイルの位置を offset に変更します バイト、from を参照 (開始、現在、終了) |
seekable() | True を返します ファイル ストリームがランダム アクセスをサポートしている場合。 |
tell() | 現在のファイルの場所を返します。 |
truncate(サイズ =None ) | ファイル ストリームのサイズを size に変更します バイト。 サイズの場合 が指定されていない場合、現在の位置にサイズ変更されます。 |
書き込み可能() | True を返します ファイル ストリームに書き込めるかどうか。 |
write(s ) | 文字列 s を書き込みます ファイルに書き込み、書き込まれた文字数を返します。 |
writelines(lines ) | 行のリストを書き込みます ファイルに。 |
Python