Pet*_*ter 2254
with open("test.txt", "a") as myfile:
myfile.write("appended text")
Run Code Online (Sandbox Code Playgroud)
sin*_*law 188
您需要在附加模式下打开文件,方法是将"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'
Run Code Online (Sandbox Code Playgroud)
注意:使用'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'
Run Code Online (Sandbox Code Playgroud)
实际上,fopen
联机帮助页指出:
以附加模式打开文件(作为模式的第一个字符)会导致对此流的所有后续写入操作发生在文件结尾处,就像在调用之前一样:
Run Code Online (Sandbox Code Playgroud)fseek(stream, 0, SEEK_END);
with
):示例:( 在实际程序中用于with
关闭文件 - 请参阅文档)
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
Run Code Online (Sandbox Code Playgroud)
Set*_*ell 46
我总是这样做,
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
Run Code Online (Sandbox Code Playgroud)
它很简单,但非常有用.
ist*_*ble 34
您可能希望传递"a"
模式参数.请参阅open()的文档.
with open("foo", "a") as f:
f.write("cool beans...")
Run Code Online (Sandbox Code Playgroud)
更新(+),截断(w)和二进制(b)模式的模式参数还有其他排列,但从just开始"a"
是最好的选择.
Cle*_*een 30
Python有三种主要模式的变体,这三种模式是:
'w' write text
'r' read text
'a' append text
Run Code Online (Sandbox Code Playgroud)
因此,要附加到文件,它就像以下一样简单:
f = open('filename.txt', 'a')
f.write('whatever you want to write here (in append mode) here.')
Run Code Online (Sandbox Code Playgroud)
然后有一些模式只会使你的代码更少的行:
'r+' read + write text
'w+' read + write text
'a+' append + read text
Run Code Online (Sandbox Code Playgroud)
最后,还有二进制格式的读/写模式:
'rb' read binary
'wb' write binary
'ab' append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
Run Code Online (Sandbox Code Playgroud)
Ala*_* M. 17
你也可以用print
代替write
:
with open('test.txt', 'a') as f:
print('appended text', file=f)
Run Code Online (Sandbox Code Playgroud)
如果test.txt不存在,它将被创建...
K.S*_*gar 13
当我们使用此行时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")
Run Code Online (Sandbox Code Playgroud)
您也可以在r+
模式下打开文件,然后将文件位置设置为文件末尾。
import os
with open('text.txt', 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Run Code Online (Sandbox Code Playgroud)
打开文件r+
模式将让你写,除了年底其他文件的位置,而a
和a+
力书写到最后。
该'a'
参数表示追加模式。如果你不想with open
每次都使用,你可以很容易地编写一个函数来为你做:
def append(txt='\nFunction Successfully Executed', file):
with open(file, 'a') as f:
f.write(txt)
Run Code Online (Sandbox Code Playgroud)
如果你想写除结尾以外的其他地方,你可以使用'r+'
†:
import os
with open(file, 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Run Code Online (Sandbox Code Playgroud)
最后,'w+'
参数授予更多的自由。具体来说,它允许您创建不存在的文件,以及清空当前存在的文件的内容。
如果你想附加到一个文件
with open("test.txt", "a") as myfile:
myfile.write("append me")
Run Code Online (Sandbox Code Playgroud)
我们声明了变量myfile
来打开一个名为test.txt
. Open 接受 2 个参数,我们要打开的文件和一个字符串,表示我们要对文件执行的权限或操作的种类
这是文件模式选项
模式说明 'r' 这是默认模式。它打开文件进行阅读。 'w' 此模式打开文件进行写入。 如果文件不存在,它会创建一个新文件。 如果文件存在,它会截断文件。 'x' 创建一个新文件。如果文件已存在,则操作失败。 'a' 以追加模式打开文件。 如果文件不存在,它会创建一个新文件。 't' 这是默认模式。它以文本模式打开。 'b' 以二进制模式打开。 '+' 这将打开一个文件进行读写(更新)
如果多个进程正在写入文件,则必须使用追加模式,否则数据将被扰乱。追加模式将使操作系统将每次写入都放在文件末尾,无论写入者认为他在文件中的位置在哪里。这是 nginx 或 apache 等多进程服务的常见问题,其中同一进程的多个实例正在写入同一日志文件。考虑一下如果你尝试寻找会发生什么,然后写:
Example does not work well with multiple processes:
f = open("logfile", "w"); f.seek(0, os.SEEK_END); f.write("data to write");
writer1: seek to end of file. position 1000 (for example)
writer2: seek to end of file. position 1000
writer2: write data at position 1000 end of file is now 1000 + length of data.
writer1: write data at position 1000 writer1's data overwrites writer2's data.
Run Code Online (Sandbox Code Playgroud)
通过使用追加模式,操作系统会将任何写入操作放在文件末尾。
f = open("logfile", "a"); f.seek(0, os.SEEK_END); f.write("data to write");
Run Code Online (Sandbox Code Playgroud)
追加最多并不意味着“打开文件,打开后转到文件末尾一次”。这意味着“打开文件,我所做的每次写入都将位于文件末尾”。
警告:为此,您必须在一次写入调用中一次性写入所有记录。如果您在多次写入之间分割数据,其他写入者可以并且将会在您的写入之间进行写入并破坏您的数据。