ファイルの基本操作

このページでは、ファイルに対する基本的な操作について説明します。

ファイル操作の基本

基本フローと構文

ファイルに対して読む、書くなどの基本的な操作をする場合、以下のフローで処理を記述します。

  1. 読み/書きのモードを指定してファイルを開く
  2. ファイルに対して読み/書きの処理を行う
  3. ファイルを閉じる

組込みのopen関数を使用すると、ファイルを開きファイルオブジェクトを取得することができます。

ファイルを開く
変数 = 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
with open('ファイルパス',  'モード') as 変数名:
    処理
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文のサンプルコード中でコロンが抜けていたため修正しました。ご連絡くださった方ありがとうございます。