Python Code Notes

Information by python engineer

ファイルを読み書きする方法 Python

f:id:vigilantPotato:20190608171903p:plain

Pythonを用いてファイルを読み書きする方法をまとめました。

パス、ファイル、フォルダの操作方法については、以下の記事を参照してください。

目次

Fileオブジェクト

ファイルを開く

Pythonでは、open関数にファイルのパスを渡すことでファイルオブジェクトを作成してから、readメソッドやwriteメソッドを用いて読み込み、書き込みを行い、最後にcloseメソッドでファイルを閉じる必要があります。

open関数は、モジュールのインポート無しで使用可能です。

例:ファイルのを開き、中身を表示する

事前にカレントディレクトリに「test.txt」を作成し、「Hello」と入力し保存しておく。

path = "test.txt"
f = open(path)
print(f.read())
f.close()

出力:Hello

with文を用いてファイルを開く

with文を用いてファイルを開くと処理終了時に自動的にファイルを閉じてくれるため、closeメソッドが不要になります。ファイルの閉じ忘れがないため、こちらの方法がおすすめです。

例:with文を用いてファイルを開く

path = "test.txt"
with open(path) as f:
    print(f.read())

出力:Hello

ファイルの読み込み

ファイルの読み込み

前述の通り、ファイルの読み込みはread関数を使用します。

open関数でファイルオブジェクトを生成する際、ファイルパス以外の引数を指定しなければ読み込みモードで開きますが、明示的に読み込みモードで開く場合は、open関数にファイルパスのほかに「r」を引数として渡します。

例:ファイルを読込モードで開き、読み込む

path = "test.txt"
with open(path, "r") as f:
    print(f.read())

出力:Hello

ファイルを1行ずつ読み込む

readメソッドの代わりに、readlineメソッドを用いると、ファイルを1行ずつ読み込むことができます。

例:ファイルを1行ずつ読み込む

事前に「test.txt」を以下の様に修正し、保存しておく。

Hello
Good evening
Good night


path = "test.txt"
with open(path, "r") as f:
    print(f.readlines())

出力:['Hello\n', 'Good evening\n', 'Good night']

1行ごとにリスト化して出力され、1行目と2行目には改行文字が追加されています。

ファイルの内容によっては、このように1行ずつに分けて読み込むと便利な場合があります。

ファイルの書き込み

ファイルの書き込み

ファイルへ書き込む際は、open関数でファイルオブジェクトを生成する際に引数「w」を渡します。

その後、writeメソッドで書き込む内容を渡すことで、ファイルへ文字列を書き込むことができます。

この方法では、すでに同名のファイルが存在している場合は上書きされてしまうことに注意してください。

例:ファイルへ書き込み

path = "test.txt"
with open(path, "w") as f:
    f.write("Hello")

出力:「Hello」と入力された「test.txt」ファイルが生成

追記モードで書き込み

上記の方法では、同名のファイルが存在している場合は上書きされ、以前の内容は失われてしまいますが、open関数でファイルオブジェクトを生成する際の引数を「a」とすることで追記モードでファイルを開くことができます。

例:ファイルへ追記

事前にファイルへ書き込みの例を実行し、「Hello」が入力された「test.txt」を生成しておく。

path = "test.txt"
with open(path, "a") as f:
    f.write("Goodnight")

出力:「test.txt」に「Goodnight」が追記される

日本語を書き込む場合

日本語を使用するには、open関数でファイルオブジェクトを生成する際に、encodingを指定する必要があります。

encodingを指定しないで日本語を書き込むと文字化けしてしまいますが、日本語に対応している「utf-8」等をencodingに指定すれば、日本語の処理が可能になります。

例:encodingを指定して日本語を書き込み

path = "test.txt"
with open(path, "w", encoding="utf-8") as f:
    f.write("こんにちは")

改行する場合

複数の文字列を書き込む場合や追記モードで文字列を追加する場合は、既存の文字列の後ろに改行無しで文字列が追記されてしまいます。

改行させたい場合は、別途改行用の文字列を一緒に書き込む必要があります。

改行用の文字列は「\n」になります。

例:改行書き込み

path = "test.txt"
with open(path, "w") as f:
    f.write("Hello\n")
    f.write("Goodnight")

出力:以下の内容の「test.txt」ファイルが生成

Hello
Goodnight