你如何追加到一个文件?
你如何附加到文件而不是覆盖它? 有附加到文件的特殊功能吗?
with open("test.txt", "a") as myfile:
myfile.write("appended text")
您需要以附加模式打开文件,方法是将“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'打开并寻找文件末尾不同 - 考虑如果另一个程序打开文件并开始在seek和write之间写入,可能会发生什么情况。 在某些操作系统上,使用'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
指出:
以追加模式(a作为模式的第一个字符)打开文件会导致对该流的所有后续写入操作发生在文件结束处,就好像在调用之前一样:
fseek(stream, 0, SEEK_END);
老简化的答案(不使用with
):
例如:(在真实的程序中使用with
关闭文件 -请参阅文档)
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
您可能想要传递"a"
作为模式参数。 查看open()的文档。
with open("foo", "a") as f:
f.write("cool beans...")
模式参数还有更新(+),截断(w)和二进制(b)模式的其他排列,但以"a"
是您最好的选择。