今回は、Pythonを使って既存のファイルに内容を追記する方法を検討します。
例えば、”Hello world!” というテキストを含む helloworld.txt というファイルがあり、Unix ファイルシステム上のカレントワーキングディレクトリに置かれているとします。
$ cat ./helloworld.txt
Hello world!
ここで、Pythonプログラムからこのファイルの末尾に “It’s good to have been born!”というテキストを追加したいとします。
最初のステップは、プログラムからファイルへの参照を取得することです。
これは組み込みの open
メソッドで行うことができます。
第1引数にファイルのパス/名前、第2引数にモードを指定し、以下のようにします。
f = open("./helloworld.txt", "a")
変数 f
はファイルオブジェクトへの参照を保持し、ファイルの最後に書き込むために使用できます。
もしファイルがまだ存在しなければ、ファイルが作成されます。
2番目の引数 “a” は、ファイルを開くときのモードを指定するもので、この場合は “Append” モードであることに注意してください。
これにより、書き込み位置がファイルの末尾に設定されます。
もし “w”(Writeモード)を使っていたなら、ファイルに書き込む内容はすべて先頭から始まり、既存の内容を上書きしてしまうでしょう。
これで、次のようにファイルに内容を書き込むことができます。
f.write("
It's good to have been born!")
f.close()
プログラムを終了した後もロックされたままにならないように、また、メモリ上にバッファリングされている内容がファイルに書き込まれるようにするために、ファイルに書き込んだ後は close
メソッドを呼び出すことを忘れないでください。
以下は、ファイルへの書き込みを行った後のファイルの様子です。
$ cat ./helloworld.txt
Hello world!
It's good to have been born!
最後に、open
メソッドのmode引数に “+”を追加すると、ファイルを追記と読み込みの両方に対して開くことができます。
これにより、ファイルへの読み込みと書き込みの両方が可能になります。
をつけないと、ファイルから読み込もうとしたときに IOError
例外が発生します。
デフォルトでは、読み込みと書き込みの両方がファイルの終端で行われますが、これは seek
メソッドを使っていつでも変更することができます。
以下は、これを実現するためのコマンドです (新しいコンテンツを読み込む前に、 flush
メソッドを使用してファイルに書き込んでいることに注意してください)。
f = open("./helloworld.txt", "a+")
f.write("I am grateful.")
f.flush()
f.seek(0)
content = f.read()
print content
f.close()
そして、最終的なファイルはこのようになります。
$ cat ./helloworld.txt
Hello world!
It's good to have been born!
I am grateful.
著者について
この記事は、コードを通じて人々の生活を向上させることに情熱を注ぐソフトウェアコンサルタント兼開発者、Jacob Stopakによって書かれました。
Jacob は Initial Commit という、好奇心旺盛な開発者が自分の好きなプログラムがどのようにコーディングされているかを学ぶためのサイトの作者です。
その注目すべきプロジェクトは、コードレベルで Git を学ぶことを支援します。