Pythonでファイルに複数行のテキストを書き込む際によく使用される`writelines()`メソッドについて、基本的な使い方から実践的な例まで詳しく解説します。

writelines()メソッドの基本

`writelines()`は、リストやイテラブル(反復可能)なオブジェクトの要素を連続してファイルに書き込むメソッドです。

# 基本的な使い方
lines = ['一行目\n', '二行目\n', '三行目\n']
with open('example.txt', 'w') as file:
    file.writelines(lines)

改行が自動で追加されない注意点

`writelines()`は改行を自動で追加しないため、必要な場合は明示的に改行文字を含める必要があります。

# 改行なしの場合
lines = ['一行目', '二行目', '三行目']
with open('example.txt', 'w') as file:
    file.writelines(lines)
# 結果: 一行目二行目三行目

# 改行を含める場合
lines = [line + '\n' for line in lines]
with open('example.txt', 'w') as file:
    file.writelines(lines)
# 結果:
# 一行目
# 二行目
# 三行目

実践的な使用例

リストの内容を書き込む

fruits = ['りんご', 'バナナ', 'オレンジ']
with open('fruits.txt', 'w', encoding='utf-8') as file:
    file.writelines(f'{fruit}\n' for fruit in fruits)

辞書のデータを書き込む

data = {'name': '山田', 'age': 30, 'city': '東京'}
with open('data.txt', 'w', encoding='utf-8') as file:
    file.writelines(f'{key}: {value}\n' for key, value in data.items())

エラー対処法

よくあるエラーと解決策

1. UnicodeEncodeError

# 解決策:encoding指定
with open('file.txt', 'w', encoding='utf-8') as file:
    file.writelines(lines)

2. TypeError

# 解決策:文字列に変換
numbers = [1, 2, 3]
with open('numbers.txt', 'w') as file:
    file.writelines(str(num) + '\n' for num in numbers)

パフォーマンスの最適化

大量のデータを書き込む場合は、ジェネレーター式を使用することで、メモリ使用量を抑えることができます。

# メモリ効率の良い書き込み
with open('large_file.txt', 'w') as file:
    file.writelines(f'{i}\n' for i in range(1000000))

まとめ

  • `writelines()`は複数行の書き込みに便利なメソッド
  • 改行は自動追加されないので、必要に応じて明示的に追加
  • エンコーディングの指定を忘れずに
  • 大量データの場合はジェネレーター式の使用を検討

これらの知識を活用することで、Pythonでのファイル操作をより効率的に行うことができます。