Pythonは標準ライブラリの中でファイル操作のメソッドを提供しています。
これは開発者として本当に便利なもので、ファイルを扱うためにこれ以上モジュールをインポートする必要がありません。
Pythonが提供するファイル操作のための主要なメソッドは、 open()
, close()
, write()
, read()
, seek()
と append()
です。
ここでは、Pythonでファイルをさまざまなモードで開くことができる open()
メソッドについて見ていきましょう。
この記事もチェック:Pythonでopenメソッドを使用してファイルを開く方法
Python でファイルを開く
ファイルを開くために必要なのは、そのファイルが置かれているディレクトリのパスだけです。
同じディレクトリにあるのであれば、ファイル名だけで十分です。
サンプルテキストを含むファイルを作成しましたので、これをサンプルとしてファイルを開く方法を学びます。
file = open ( 'OpenFile.txt' )
print ( file .read())
file .close()
|
1. open()メソッドによるファイルのオープン
OpenFile.txtを開いてファイルの内容を読むには、open()
メソッドと read()
メソッドを使用します。
file = open ( 'OpenFile.txt' )
print ( file .read())
file .write( "testing write" )
file .close()
|
read()` メソッドはファイルの全内容を読み込みます。
file = open ( 'OpenFile.txt' , 'w' )
print ( file .read())
file .close()
|
デフォルトでは、open()
メソッドはファイルを読み取り専用でオープンします。
ファイルに書き込むには、ファイルを書き込みモードで開くように指定する必要があります。
2. open() メソッドの異なるモード
デフォルトのモードでファイルに書き込んでみましょう。
file = open ( 'OpenFile.txt' , 'w' )
file .write( 'New content )
file .close()
|
読み込みはそのままにして、どこでコードが止まるか見てみましょう。
file = open ( 'OpenFile.txt' , 'r+' )
print ( file .read())
file .write( 'r+ method, adds a line )
file .close()
|
では、モードとは何か、どうやって追加するのでしょうか?以下に、open() メソッドを使用した場合のモードの一覧を示します。
- r: リードオンリーモード。
- r+: r+: 読み書きモード。ファイルが存在しない場合、新しいファイルは作成されず、open は失敗します。
- rb: rb: 読み取り専用のバイナリモード。画像や動画などを読み取ることができます。
- w: 書き込み専用モード。w: 書き込み専用モード。既存のファイルの内容を上書きします。指定されたファイル名が存在しない場合、新規にファイルを作成します。
- w+: 読み出しと書き込みを行うモードです。
- wb: wb: メディアファイルへの書き込みを行うバイナリ書き込みモード。
- wb+:バイナリ読み書きモード。
- a: a: 追記モード。既存のコンテンツを上書きしない
- a+: アペンドとリードのモード。ファイル名が存在しない場合、新しいファイルを作成します。
- ab: 画像や動画などのバイナリファイルを追加するモードです。
- ab+: アペンドとリードのバイナリモード。
3. Pythonで書き込みモードでファイルを開く
Pythonで書き込みモードでファイルを開くには、複数の方法があります。
Pythonのファイル操作メソッドがどのようにファイルに書き込むかによって、以下のモードのいずれかを使用することができます。
with open ( 'OpenFile.txt' , 'r+' ) as file :
print ( file .read())
|
最初の行でファイルを開くときに’w’を追加することで、ファイルを書き込みモードで開くことを指定しています。
しかし、この操作は失敗します。
なぜなら、ファイルは書き込み専用で、read()メソッドを使用することができないからです。
with open ( 'OpenFile.txt' , 'r+' ) as file :
lines = file .readlines()
for line in lines:
print (line.split())
|
上記のコードでは、テキストファイルの内容を完全に消去し、代わりに「New content」と表示するだけです。
ファイルを上書きしたくない場合は、a+モードやr+モードを使用することができます。
r+ モードは write()
メソッドに渡された内容をすべて書き込みます。
aまたはa+モードは、r+モードと同じ動作をしますが、大きな違いが1つあります。
r+ モードの場合、指定されたファイル名が存在しない場合、新しいファイルは作られませ ん。
しかし、a+モードでは、指定されたファイルが存在しない場合、新しいファイルが作成されます。
この記事もチェック:Pythonのmapメソッドの使い方|ラムダ関数や引数が複数の場合の使い方も解説
4. with節を使ったファイルのオープン
open()メソッドでファイルを読み込む場合、メモリリークを防ぐために必ず
close()メソッドを呼び出す必要があります。
開発者としては、close()` メソッドを追加しそびれて、ファイルがオープンされているためにプログラムがファイルのメモリをリークする可能性があります。
小さなファイルであれば、システムリソースにそれほど顕著な影響を与えませんが、大きなファイルを扱う場合には顕著に現れます。
上記の例では、出力は最初に見たものと同じになりますが、ファイルを閉じる必要はありません。
with` ブロックは実行されるとすぐにロックを取得し、ブロックが終了するとロックを解放します。
また、with
のコードブロックの中にいながら、データに対して他のメソッドを実行することもできます。
今回は、OpenFile.txtを編集して、より理解しやすいように文章を追加してみました。
with`ステートメントは、そのスコープ内で作業を続ける限り、私たちのためにメモリハンドリングを行います。
これはPythonでファイルを扱うための、また別の、しかしより良い方法なのです。
まとめ
これで、Pythonでファイルを開く方法と、open()メソッドでファイルを開くためのさまざまなモードを処理する方法を把握できたはずです。
今後のチュートリアルで、さらなるファイル操作の方法を説明します。