Pythonでファイルに追加するには?

ファイルを上書きするのではなく、どのようにしてファイルに追加するのですか?ファイルに追記する特別な関数はありますか?

ソリューション
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
解説 (16)

a "または "ab "をモードとして設定することで、ファイルをアペンドモードで開く必要があります。open()]1*を参照してください。

a "モードでオープンすると、書き込み位置は常に**ファイルの最後になります(アペンド)。a+"で開くと、読み取り、逆方向へのシーク、読み取りが可能になります(ただし、すべての書き込みはファイルの最後になることに変わりはありません!)。

>>> with open('test1','wb') as f:
        f.write('test')
>>> with open('test1','ab') as f:
        f.write('koko')
>>> with open('test1','rb') as f:
        f.read()
'testkoko'

注意。a' を使うことは、'w' で開いてファイルの最後までシークすることとは違います。シークと書き込みの間に他のプログラムがファイルを開いて書き込みを始めたらどうなるかを考えてみてください。他のプログラムがファイルを開き、シークと書き込みの間に書き込みを開始した場合のことを考えてみてください。一部のオペレーティングシステムでは、'a'でファイルを開くと、それ以降の書き込みがすべてファイルの最後にアトムで追加されることが保証されます(他の書き込みによってファイルが大きくなっても)。


a」モードの動作についてもう少し詳しく説明します(※Linuxでのみテスト済み)。シークバックしても、すべての書き込みがファイルの最後に追加されます。

>>> f = open('test','a+') # Not using 'with' just to simplify the example REPL session
>>> f.write('hi')
>>> f.seek(0)
>>> f.read()
'hi'
>>> f.seek(0)
>>> f.write('bye') # Will still append despite the seek(0)!
>>> f.seek(0)
>>> f.read()
'hibye'

実際、fopen manpageには次のように書かれています。

アペンドモード(モードの最初の文字がa)でファイルをオープンすると ファイルを追記モード(モードの最初の文字がa)で開くと、それ以降のストリームへの書き込み操作はすべて 呼び出しの前のように、ファイルの終わりに発生します。

fseek(stream, 0, SEEK_END)。


古い簡略化された答え(withを使っていない)。

例: (*実際のプログラムでは with` を使ってファイルを閉じる - [ドキュメント][3]を参照)

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'

[3]: http://docs.python.org/2/whatsnew/2.6.html#pep-343-the-with-statement

解説 (3)

modeの引数には"a"を渡したいところです。 open()]1のドキュメントを参照してください。

with open("foo", "a") as f:
    f.write("cool beans...")

modeの引数には、update(+)、truncating(w)、binary(b)の各モードの組み合わせがありますが、"a"だけで始めるのが最も良い方法です。

解説 (2)