如何在Python中追加到一个文件?

你如何追加到文件中而不是覆盖它?是否有一个特殊的函数可以追加到文件中?

解决办法
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
评论(16)

你需要通过设置"a"或"ab"作为模式,以追加模式打开文件。参见open()

当你用"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'

事实上,fopenmanpage指出。

以附加模式打开一个文件(a为模式的第一个字符 导致所有随后对这个流的写操作都发生在 文件的末端,就像在调用之前一样。

fseek(stream, 0, SEEK_END)。


旧的简化答案(不使用with)。

例子: (在真正的程序中使用with来关闭文件 - 见文档)

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

你可能想传递"a"作为模式参数。 参见 open() 的文档。

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

模式参数还有其他变化,如更新(+)、截断(w)和二进制(b)模式,但只用"a"是你最好的选择。

评论(2)