如何追加到文件而不是覆盖它?


当前回答

你也可以用打印代替书写:

with open('test.txt', 'a') as f:
    print('appended text', file=f)

如果test.txt不存在,将创建它。。。

其他回答

有时,初学者会遇到这个问题,因为他们试图在循环中打开和写入文件:

for item in my_data:
    with open('results.txt', 'w') as f:
        f.write(some_calculation(item))

问题是,每次打开文件进行写入时,它都会被截断(清除)。

我们可以通过以追加模式打开来解决这个问题;但在这种情况下,通常最好通过颠倒逻辑来解决问题。如果文件只打开一次,那么每次都不会被覆盖;并且只要它是打开的,我们就可以继续写它——我们不必在每次写的时候都重新打开它(Python这样做是没有意义的,因为它会增加所需的代码而没有好处)。

因此:

with open('results.txt', 'w') as f:
    for item in my_data:
        f.write(some_calculation(item))

当我们使用这行open(文件名,“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")

您也可以在r+模式下打开文件,然后将文件位置设置为文件末尾。

import os

with open('text.txt', 'r+') as f:
    f.seek(0, os.SEEK_END)
    f.write("text to add")

以r+模式打开文件将允许您写入除结尾之外的其他文件位置,而a和a+强制写入结尾。

“a”参数表示追加模式。如果你不想每次都使用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+”参数赋予了更多的自由。具体来说,它允许您在文件不存在时创建该文件,以及清空当前存在的文件的内容。


†该功能的积分归@Primusa

我总是这样做,

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

它很简单,但非常有用。