Pythonでテキストファイルに書き込む:write()とwritelines()の違いと改行の扱い

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' モードを使用します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次