协慌网

登录 贡献 社区

如何在 Python 中追加文件?

如何附加到文件而不是覆盖它?是否有附加到文件的特殊功能?

答案

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' 打开并寻找文件末尾不同 - 考虑如果另一个程序打开文件并开始在搜索和写入之间写入可能会发生什么。在某些操作系统上,使用 “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 指出:

以附加模式打开文件(作为模式的第一个字符)会导致对此流的所有后续写入操作发生在文件结尾处,就像在调用之前一样:

fseek(stream, 0, SEEK_END);

老简化的答案(不使用with ):

例如:( 在真实的程序中使用with关闭文件 - 见文档

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

我总是这样做,

f = open('filename.txt', 'a')
f.write("stuff")
f.close()

它很简单,但非常有用。