このページでは、ファイルに対する基本的な操作について説明します。
Contents
ファイル操作の基本
基本フローと構文
ファイルに対して読む、書くなどの基本的な操作をする場合、以下のフローで処理を記述します。
- 読み/書きのモードを指定してファイルを開く
- ファイルに対して読み/書きの処理を行う
- ファイルを閉じる
組込みのopen関数を使用すると、ファイルを開きファイルオブジェクトを取得することができます。
ファイルパスですが、実行したpythonスクリプトの場所がカレントディレクトリとなります。
ファイルオープンのモード
ファイルを開く際に指定するモードは4つあります。
モード | 意味 |
---|---|
r | 読み込み |
w | 書き込み |
a | 追記 |
b | バイナリ |
t | テキスト(デフォルトでON) |
ファイルの読み込み
ではまずは、テキストファイルを読み込んでみましょう。
以下のサンプルコードは実行ディレクトリにsample.txtというテキストファイルを配置してください。
f = open('sample.txt', 'r') # ファイルを開く text = f.read() # ファイルを読み込む print(text) # テキストファイルの内容が出力される f.close() # ファイルを閉じる
ファイルの書き込み
今度はファイルに書き込んでみましょう。
f = open('sample2.txt', 'w') f.write('aaaa bbbb cccc') f.close()
sample2.txtというファイルが作成され、3行目に記述した文字列がファイルに書き込まれます。
上のコードでは、実行するたびにファイルの内容が新たに上書きされてしまいます。追記したい場合は以下のように第2引数に'a'をしていします。
f = open('sample2.txt', 'a')
読み書きする
読み込んだ後、書き込みたい場合は以下のようにr+を指定します。
f = open('sample2.txt', 'r+')
文字コードの指定
encoding引数に文字コードを指定することができます。encodingが指定されていない場合ははプラットフォームに依存します。
対話モードで以下の2コマンドを実行してみてください。お使いの環境のデフォルトのencodingを調べることができます。
$ python >>> import locale >>> locale.getpreferredencoding(False) 'UTF-8'
例えば、sjisを使用したい場合は、以下のように引数に'shift_jis'を指定します。
f = open('sample.txt', 'r', encoding='shift_jis')
closeとwith文
ファイルを開いた後は、closeをしますが、処理中に例外が発生したりするとclose処理が呼び出されず、予期せぬ結果がファイルに出力されたりします。
close漏れにともなう不具合を防ぐために、with文を利用しましょう。以下の構文となります。
処理
with open('sample.txt', 'r') as f: text = f.read() print(text)
途中で例外が発生しても、close処理が自動的に呼びだされます。
以下はwith文の代わりにtry/finallyを使用した例です。比較してみると明らかにwith文の方がすっきり記述できまることが分かりますね。
try: f = open('sample.txt', 'r') text = f.read() print(text) finally: f.close()
2020/4/29 サンプルコード中のシングルクォートが’(htmlの一重引用符)になっていたので修正しました。ご連絡くださった方ありがとうございます。
2020/9/25 with文のサンプルコード中でコロンが抜けていたため修正しました。ご連絡くださった方ありがとうございます。