Pythonの基礎 - ファイル
概要
Pythonでは、ローカルに保存されたファイルからデータを読み込んだり、ファイルへデータを書き込むことができる。
また、ディレクトリに含まれるファイルの一覧を取得したり、ディレクトリ名を変更したりすることもできる。
ファイルのオープン / クローズ
ファイルを開く
組み込み関数のopen関数を使用してファイルを開くことができる。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
第1引数は、開くファイル名を指定する。
正常に開くことができる場合、対応するファイルオブジェクトを返す。(ファイルオブジェクトは、第2引数で指定したモードにより異なる)
正常に開くことができない場合、例外OSErrorが送出される。
第2引数は、ファイルを開くモードを指定する。(デフォルトはテキストモード(t)のため、tを明示的に付加する必要はない)
バイナリモード(b)で読み込み権限や書き込み権限を付加する場合、r+bやwbと指定する。
- r
- 読み込み用(ファイルが存在しない場合はエラー)
- r+
- 読み込みおよび書き込み用(ファイルが存在しない場合はエラー)
- w
- 書き込み用(ファイルの中身をクリア)
- w+
- 読み込みおよび書き込み用(ファイルの中身をクリア)
- a
- 書き込み用(ファイルの末尾に追加)
- a+
- 読み込みおよび書き込み用(ファイルの末尾に追加)
- x
- 書き込み用(ファイルが存在している場合はエラー)
- x+
- 読み込みおよび書き込み用(ファイルが存在している場合はエラー)
- b
- バイナリモード
- t
- テキストモード
第4引数は、使用する文字エンコーディングを指定する。
これは、テキストモードでのみ指定する。
- ascii
- cp932
- euc_jp
- shift_jis
- utf-8 (utf_8)
エンコーディングを省略した場合は、現在のプラットフォームのデフォルトエンコーディングが使用される。
自身の環境でのデフォルトエンコーディングを確認するには、以下のソースコードを実行する。
import locale
locale.getpreferredencoding()
もし、UTF-8を使用して記述されたファイルを読み込む場合、encoding='UTF-8'のように引数に指定する。
なお、開くファイルが存在しない場合は、例外FileNotFoundErrorが発生する。
f1 = open('myfile.txt', 'r')
f2 = open('myfile.txt', 'w+')
f3 = open('myfile.txt', 'r', encoding='UTF-8')
f4 = open('myfile.txt', 'rb')
正常にファイルが開かれると、ファイルオブジェクトが返る。
ファイルオブジェクトのクラスは、open関数で使用したモードによって異なる。
例えば、テキストモードの場合はio.TextIOWrapper、バイナリモードの読み込みの場合はio.BufferedReader、バイナリモードの書き込みの場合はio.BufferedWriter、
バイナリモードの読み書きの場合はio.BufferedRandomとなる。
- r
- io.TextIOWrapper
- r+
- io.TextIOWrapper
- rb
- io.BufferedReader
- r+b
- io.BufferedRandom
- w
- io.TextIOWrapper
- w+
- io.TextIOWrapper
- wb
- io.BufferedWriter
- w+b
- io.BufferedRandom
- a
- io.TextIOWrapper
- a+
- io.TextIOWrapper
- ab
- io.BufferedWriter
- a+b
- io.BufferedRandom
- x
- io.TextIOWrapper
- x+
- io.TextIOWrapper
- xb
- io.BufferedWriter
- x+b
- io.BufferedRandom
ファイルを閉じる
ファイルの使用後は、close関数を使用してファイルオブジェクトを閉じる。
f = open('myfile.txt', 'r')
# 処理1
# 処理2
f.close()
他の方法として、with文を使用してファイルを開く場合、使用後は自動的にファイルを閉じることができる。
どちらの方法でも、結果は同じになる。
with open('myfile.txt', 'r') as f:
# 処理1
# 処理2
以下の例では、myfile.txtファイルの内容を読み込み画面に出力した後、ファイルオブジェクトを閉じている。
以下の内容のmyfile.txtファイルを作成する。
# myfile.txtファイル Hello World
f = open('myfile.txt', 'r')
data = f.read()
print(data)
f.close()