IT-Swarm.Net

如何在Python中追加文件?

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

1348
user502039
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
2063
Petter

您需要在附加模式下打开文件,方法是将“a”或“ab”设置为模式。见open()

当您使用“a”模式打开时,写入位置将always位于文件的末尾(附加)。您可以使用“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 states:

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

fseek(stream, 0, SEEK_END);

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

示例:(在实际程序中使用with关闭文件 - 请参阅 文档

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

我总是这样做,

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

它很简单,但非常有用。

36
Seth Connell

您可能希望将"a"作为mode参数传递。请参阅 open() 的文档。

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

更新(+),截断(w)和二进制(b)模式的模式参数还有其他排列,但从"a"开始是最好的选择。

33
istruble

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
21
Cleve Green

当我们使用这行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")
11
K.Suthagar

如果要附加到文件 

with open("test.txt", "a") as myfile:
    myfile.write("append me")

我们声明变量myfile来打开一个名为test.txt的文件。 Open需要2个参数,我们要打开的文件和一个字符串,表示我们要对文件执行的权限或操作的种类

这是文件模式选项

模式说明
 
'r'这是默认模式。它打开文件进行读取。[。_____。]'w'此模式打开文件进行写入。 
如果文件不存在,则会创建一个新文件。[。_____。]如果文件存在则会截断文件。
'x'创建一个新文件。如果文件已经存在,则操作失败。
'a'在追加模式下打开文件。 
如果文件不存在,则会创建一个新文件。[。_____。]'t'这是默认模式。它以文本模式打开。
'b'以二进制模式打开。
'+'这将打开一个文件进行读写(更新)
1
nima_moradi

'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+'参数赋予更多自由。具体来说,它允许您创建文件(如果该文件不存在),以及清空当前存在的文件的内容。


这个功能的功劳归到@Primusa

1
Alec Alameddine

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

import os

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

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

0
Primusa