Pythonで計算結果やログデータをファイルに保存する際、組み込み関数の open() でファイルを「書き込みモード」で開き、メソッドを使ってデータを書き込みます。
書き込みメソッドには、単一の文字列を書き込む write() と、リストなどのシーケンスをまとめて書き込む writelines() の2種類があります。
この記事では、それぞれの基本的な使い方と、特に間違いやすい「改行コード」の扱いについて解説します。
1. write():文字列を書き込む
write() メソッドは、引数として渡された1つの文字列をファイルに書き込みます。
注意点: print() 関数とは異なり、write() は末尾に自動で改行(\n)を追加しません。改行が必要な場合は、明示的に \n を文字列に含める必要があります。
具体的な使用例
日報のヘッダー情報をファイルに書き込む例です。
file_path = "daily_report.txt"
report_content = "日付: 2025-12-05\n担当者: 山田\n業務内容: データ分析\n"
# 'w' モードで開き、書き込む(ファイルがなければ新規作成、あれば上書き)
with open(file_path, "w", encoding="utf-8") as f:
# 文字列を一括書き込み
f.write(report_content)
# 追加で書き込む(改行を忘れないように注意)
f.write("--------------------\n")
f.write("進捗率: 80%\n")
print(f"{file_path} に書き込みました。")
実行後に作成されるファイル (daily_report.txt):
日付: 2025-12-05
担当者: 山田
業務内容: データ分析
--------------------
進捗率: 80%
2. writelines():リストをまとめて書き込む
writelines() メソッドは、文字列のリスト(またはタプルなどのイテラブル)を受け取り、それらを順番にファイルに書き込みます。
重要な注意点: メソッド名に “lines”(複数行)とありますが、これも自動で改行を追加しません。リストの各要素の末尾に改行コードが含まれていない場合、すべての文字列が1行に繋がって書き込まれてしまいます。
具体的な使用例:商品リストの保存
商品名のリストをファイルに保存するケースを考えます。
product_list = ["Desktop PC", "Monitor", "Keyboard", "Mouse"]
file_path_list = "products.txt"
with open(file_path_list, "w", encoding="utf-8") as f:
# 悪い例: そのまま writelines すると改行されない
# f.writelines(product_list)
# -> Desktop PCMonitorKeyboardMouse となってしまう
# 良い例: 各要素の末尾に改行コードを付与してから書き込む
# リスト内包表記などで改行を追加する
lines_with_break = [f"{item}\n" for item in product_list]
f.writelines(lines_with_break)
print(f"{file_path_list} にリストを書き込みました。")
実行後に作成されるファイル (products.txt):
Desktop PC
Monitor
Keyboard
Mouse
リスト内包表記 [f"{item}\n" for item in product_list] を使うことで、簡潔に改行付きのリストを作成できます。
追記モード (a) での書き込み
open() のモードを 'w'(Write)にすると、既存のファイル内容は全て消去され、上書きされます。 既存の内容を残したまま、末尾にデータを追加したい場合は、モードを 'a'(Append) にします。
log_file = "app.log"
# 'a' モードで開く(追記)
with open(log_file, "a", encoding="utf-8") as f:
f.write("2025-12-05 10:00:00 - 処理を開始しました\n")
f.write("2025-12-05 10:00:05 - 処理が完了しました\n")
print("ログを追記しました。")
まとめ
write(str): 1つの文字列を書き込みます。改行は自動追加されません。writelines(list): 文字列のリストを連結して書き込みます。各要素の間に改行は自動追加されません。- 改行が必要な場合は、
\nを明示的に含める必要があります。 - 上書きなら
'w'、追記なら'a'モードを使用します。
