PythonでTypeError: write() argument must be str, not intというエラーに遭遇したことはありませんか?このエラーは`file.write()`メソッドを使用してファイルに数値を直接書き込もうとした際によく発生します。

この記事では、このエラーの原因と解決方法について詳しく解説します。

エラーの原因

このエラーが発生する主な理由は、`write()`メソッドが文字列型(str)のみを受け付けるのに対して、整数型(int)や浮動小数点型(float)などの数値を直接書き込もうとしているためです。

# エラーが発生するコード例
with open('output.txt', 'w') as f:
    f.write(42)  # TypeError: write() argument must be str, not int

解決方法

1. str()関数を使用する方法

最も一般的な解決方法は、`str()`関数を使って数値を文字列に変換することです。

with open('output.txt', 'w') as f:
    f.write(str(42))  # 正しく動作します

2. フォーマット文字列を使用する方法

f-strings や format()メソッドを使用して、より柔軟に書き込むことができます。

number = 42
with open('output.txt', 'w') as f:
    # f-strings を使用
    f.write(f'数値: {number}')
    
    # format() メソッドを使用
    f.write('数値: {}'.format(number))

3. 複数の値を書き込む場合

複数の値を書き込む場合は、各値を文字列に変換して連結する必要があります。

numbers = [1, 2, 3, 4, 5]
with open('output.txt', 'w') as f:
    # リスト内包表記を使用
    f.write('\n'.join(str(num) for num in numbers))

注意点

  • `write()`メソッドは自動で改行を追加しません。必要な場合は`\n`を明示的に追加してください。
  • バイナリモード('wb')でファイルを開いている場合は、文字列をエンコードする必要があります。
with open('output.txt', 'wb') as f:
    f.write(str(42).encode('utf-8'))

まとめ

`file.write()`メソッドで数値を書き込む際は、必ず文字列に変換する必要があります。主な変換方法として:

  • `str()`関数の使用
  • f-strings の活用
  • format()メソッドの利用

これらの方法を状況に応じて使い分けることで、効率的にファイル書き込みを行うことができます。