如何在不覆盖文件的情况下向文件追加内容?
你需要使用追加模式打开文件,在模式中设置 "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
的手册页面中写道:打开一个文件以附加模式(mode以字符“a”开头)打开会导致所有后续对此流的写操作都发生在文件末尾,就好像在调用之前已经执行了这些写操作: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()
这很简单,但非常实用。
Python有许多基于主要三种模式的变体,这三种模式是:
'w' write text
'r' read text
'a' append text
f = open('filename.txt', 'a')
f.write('whatever you want to write here (in append mode) here.')
然后还有一些模式,只是让你的代码变得更简短:
'r+' read + write text
'w+' read + write text
'a+' append + read text
最后,有二进制格式的读写模式:
'rb' read binary
'wb' write binary
'ab' append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
你可能想将 "a"
作为模式参数传递。请查看与 open() 相关的文档。
with open("foo", "a") as f:
f.write("cool beans...")
还有其他用于更新(+)、截断(w)和二进制(b)模式的模式参数的排列组合,但以只使用"a"
开始是最好的选择。
file
与一个内置函数同名,不要将其用作变量名。 - Mark Tolonenfile
不再是内置函数。即使在Python 2中,也很少使用它(参见https://dev59.com/fmct5IYBdhLWcg3wn-1z#11942631)。打开文件是一个常见操作。在Python 2和3中都可以使用file
名称,知道何时不一致是可以接受的(参见https://www.python.org/dev/peps/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds)。 - jfs你也可以使用 print
而不是 write
来实现:
with open('test.txt', 'a') as f:
print('appended text', file=f)
如果 test.txt 文件不存在,它将会被创建...
当我们使用这条语句 open(filename, "a")
时,其中的 a
表示追加文件,也就是允许向现有文件中插入额外数据。
您只需使用以下几行代码即可将文本追加到文件中。
def FileSave(filename,content):
with open(filename, "a") as myfile:
myfile.write(content)
FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")
'a'
参数表示追加模式。如果你不想每次使用 with open
,可以轻松编写一个函数为您完成:
def append(txt='\nFunction Successfully Executed', file):
with open(file, 'a') as f:
f.write(txt)
如果你想在文件的其他位置进行写入,可以使用'r+'
†:
import os
with open(file, 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
最后,'w+'
参数提供了更多的自由。具体来说,它允许您在文件不存在时创建文件,并清空当前存在文件的内容。
您也可以以r+
模式打开文件,然后将文件位置设置为文件末尾。
import os
with open('text.txt', 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
r+
模式打开文件后,除了末尾位置以外,您可以写入其他文件位置;而a
和a+
则只能强制写入结尾。
如果您想要将内容追加到文件中
with open("test.txt", "a") as myfile:
myfile.write("append me")
myfile
来打开一个名为test.txt
的文件。Open需要两个参数,我们要打开的文件和一个表示我们要对文件执行的权限或操作的字符串。模式 描述
'r' 这是默认模式。它打开文件以供读取。 'w' 此模式打开文件以供写入。 如果文件不存在,则创建新文件。 如果文件存在,则截断文件。 'x' 创建一个新文件。如果文件已经存在,则操作失败。 'a' 以追加模式打开文件。 如果文件不存在,则创建新文件。 't' 这是默认模式。它以文本模式打开。 'b' 这将以二进制模式打开。 '+' 这将打开一个文件以供读取和写入(更新)。
with
还有一个功能上的区别。with
打开一个上下文管理器,在打开和close()
之间即使出现错误,也会关闭文件。 - Brianwith open("test.txt", 'a') as myfile: myfile.write("appended text")
,但是在open中需要'a'。 - Timo