Python での書き込み
-
Python で
write()
およびwritelines()
メソッドを使用して指定されたテキストをファイルに書き込む -
Python で
write()
およびwritelines()
メソッドを使用してイテラブルをファイルに書き込む
このチュートリアルでは、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