PYTHON MEBY

Pythonでファイルに書き込む(write, writelines)

この記事では、Pythonでファイルに書き込むための様々な方法について説明します。`write()`メソッドと`writelines()`メソッドの使い方、ファイルモード、エラー処理、効率的な書き込み方法などを解説します。

目次

write()メソッドによるファイルへの書き込み

最も基本的なファイル書き込み方法は`write()`メソッドです。このメソッドは、ファイルに文字列を書き込みます。

f = open('output.txt', 'w')
f.write('Hello, world!')
f.close()

`'w'`モードで開くと、ファイルが存在しない場合は新しく作成され、存在する場合は上書きされます。`write()`メソッドは、書き込んだバイト数を返します。

f = open('output.txt', 'w')
bytes_written = f.write('Hello, world!')
print(f'Bytes written: {bytes_written}')
f.close()

writelines()メソッドによるファイルへの書き込み

`writelines()`メソッドは、イテラブルオブジェクト(リストやタプルなど)をファイルに書き込むことができます。各要素は改行文字で区切られて書き込まれます。

lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
f = open('output.txt', 'w')
f.writelines(lines)
f.close()

リストの各要素に既に改行文字が含まれていることに注意してください。含まれていない場合は、事前に追加する必要があります。

lines = ['Line 1', 'Line 2', 'Line 3']
f = open('output.txt', 'w')
f.writelines(line + '\n' for line in lines)
f.close()

様々なファイルモード

ファイルを開くモードにはいくつか種類があります。

  • `'r'` : 読み込みモード (デフォルト)
  • `'w'` : 書き込みモード (ファイルが存在すれば上書き)
  • `'x'` : 書き込みモード (ファイルが存在すればエラー)
  • `'a'` : 追加モード (ファイルの末尾に追加)
  • `'b'` : バイナリモード
  • `'t'` : テキストモード (デフォルト)
  • `'+'` : 読み書きモード

エラー処理と例外処理

ファイル操作では、ファイルが見つからない、アクセス権がないなどのエラーが発生する可能性があります。`try...except`ブロックを使用してエラーを処理しましょう。

try:
    f = open('output.txt', 'w')
    f.write('Hello, world!')
    f.close()
except FileNotFoundError:
    print('ファイルが見つかりません')
except IOError:
    print('ファイル操作中にエラーが発生しました')

ファイルを開いた後には必ず`close()`メソッドを呼び出してファイルを閉じましょう。`with`ステートメントを使うと、自動的にファイルを閉じることができるので便利です。

効率的な書き込み

大量のデータを書き込む場合は、バッファリングを利用することで効率を高めることができます。`with open(...)`構文を使用することで、自動的にバッファリングが有効になります。

with open('output.txt', 'w') as f:
    f.write('This is a long string.' * 10000)

この方法では、一度に大量のデータを書き込むのではなく、バッファリングによって効率的に書き込みを行います。

さらに、`writelines()`メソッドとジェネレータを組み合わせることでメモリ使用量を抑えることができます。

サンプルコード

以下のサンプルコードでは、`write()`と`writelines()`メソッド、エラー処理、`with`ステートメントを組み合わせて使用しています。

import os

def write_to_file(filename, data):
    try:
        with open(filename, 'w') as f:
            f.write(data)
        print(f'Successfully wrote to {filename}')
    except IOError as e:
        print(f'An error occurred: {e}')

write_to_file('my_file.txt', 'This is some text.')

lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
try:
    with open('my_file2.txt', 'w') as f:
        f.writelines(lines)
    print('Successfully wrote lines to my_file2.txt')
except IOError as e:
    print(f'An error occurred: {e}')

関連記事