Python での書き込み

Subodh Adhikari 2023年10月10日
  1. Python で write() および writelines() メソッドを使用して指定されたテキストをファイルに書き込む
  2. Python で write() および writelines() メソッドを使用してイテラブルをファイルに書き込む
Python での書き込み

このチュートリアルでは、Python の write() メソッドと writelines() メソッドの違いを紹介して説明します。

Python で write() および writelines() メソッドを使用して指定されたテキストをファイルに書き込む

write() メソッドは、引数として文字列を予期し、それをファイルに書き込みます。文字列のリストを提供すると、例外が発生します。writelines() メソッドは反復可能な引数を期待します。また、write() メソッドは出力を表示しますが、改行文字を提供しませんが、writelines() メソッドは出力を表示し、文字列の最後に改行文字を提供します。writelines() は、イテラブルの各項目の後に新しい行を自動的に挿入しないことに注意することが重要です。私たちは自分たちで新しいラインを提供しなければなりません。ファイルに書き込む行が多い場合は、writelines() の方が適しています。一時的に連結された文字列を作成せず、行を繰り返すだけなので、パフォーマンスは良好です。

以下のプログラムでは、ファイル samplefile.txt を書き込みモードで開きました。lines 変数はタプル、つまり文字列の不変のコレクションです。プログラムを実行しようとすると、例外タイプのエラーが発生しました。write() メソッドに提供した引数は、エラーの原因となったタプルです。ここでは、ファイル処理に with メソッドを使用しました。このメソッドは、より優れた構文と例外処理を提供します。したがって、該当する場合は with メソッドを使用することをお勧めします。この方法は、開いているファイルが完了すると閉じられるため、便利です。

サンプルコード:

# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open("samplefile.txt", "w") as f:
    f.write(lines)

出力:

TypeError: write() argument must be str, not tuple

同様のコンテキストで、writelines() を使用すると、プログラムが正常に実行され、lines が引数として writelines() メソッドに渡される samplefile.txt という名前のファイルが作成されます。

サンプルコード:

# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open("samplefile.txt", "w") as f:
    f.writelines(lines)

出力:

Good
Morning
Sunshine

同じプログラムの場合、複数の行は lines_joined と呼ばれる単一の文字列変数に連結されます。これは write() メソッドの引数として簡単に受け入れられます。

サンプルコード:

# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines_joined = line1 + nl + line2 + nl + line3 + nl
with open("samplefile.txt", "w") as f:
    f.write(lines_joined)

出力:

Good
Morning
Sunshine

Python で write() および writelines() メソッドを使用してイテラブルをファイルに書き込む

join() メソッドは、イテラブル内のすべてのアイテムを受け取り、それらを 1つの文字列に結合します。以下のプログラムでは、の文字列を連結するための接着剤として'\n'を使用して join() メソッドを使用しました。+ 演算子を使用するよりも、連結に適したアプローチです。

サンプルコード:

# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as f:
    f.write("\n".join(lines))

出力:

Hello
World

非常に長い文字列のリストに join() メソッドを使用するのは効率的ではありません。このような場合、まったく新しい非常に長い文字列が、書き込む前にメモリに作成されます。そのため、以下のプログラムでは、ジェネレータ式を使用して改行に文字列を記述しました。ここでは、データは区分的に書き込まれます。

サンプルコード:

# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as f:
    for l in lines:
        f.write("%s\n" % l)

出力:

Hello
World

上記と同じプログラムは、writelines() メソッドを介して実装されます。ジェネレータ式を使用して、改行で終了する文字列を動的に作成します。writelines() メソッドは、この文字列のシーケンスを繰り返し処理し、すべての項目を書き込みます。

サンプルコード:

# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as file:
    file.writelines("%s\n" % t for t in texts)

出力:

Hello
World

関連記事 - Python File