如何附加到文件?
- 2024-11-19 08:38:00
- admin 原创
- 9
问题描述:
如何将内容附加到文件而不是覆盖它?
解决方案 1:
将模式设置open()
为"a"
(追加)而不是"w"
(写入):
with open("test.txt", "a") as myfile:
myfile.write("appended text")
文档列出了所有可用的模式。
解决方案 2:
您需要以附加模式打开文件,方法是将模式设置为“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
手册页指出:
以追加模式打开文件(模式的第一个字符为 a)会导致对此流的所有后续写入操作都发生在文件末尾,就像在调用之前一样:
fseek(stream, 0, SEEK_END);
旧的简化答案(不使用with
):
示例:(在实际程序中用于with
关闭文件- 参见文档)
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
解决方案 3:
我总是这样做,
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
它很简单,但非常有用。
解决方案 4:
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
解决方案 5:
您可能希望将其作为模式参数传递。请参阅open()"a"
的文档。
with open("foo", "a") as f:
f.write("cool beans...")
模式参数还有其他排列,包括更新(+)、截断(w)和二进制(b)模式,但从 just 开始"a"
是最好的选择。
解决方案 6:
您还可以使用print
而不是 来执行此操作write
:
with open('test.txt', 'a') as f:
print('appended text', file=f)
如果test.txt不存在,则会创建它...
解决方案 7:
当我们使用此行时open(filename, "a")
,a
表示附加文件,这意味着允许向现有文件插入额外的数据。
您只需使用以下几行即可将文本附加到文件中
def FileSave(filename,content):
with open(filename, "a") as myfile:
myfile.write(content)
FileSave("test.txt","test1
")
FileSave("test.txt","test2
")
解决方案 8:
参数'a'
表示追加模式。如果你不想with open
每次都使用,你可以轻松地编写一个函数来为你完成它:
def append(txt='
Function 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
解决方案 9:
您也可以在模式下打开文件r+
,然后将文件位置设置为文件末尾。
import os
with open('text.txt', 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
以模式打开文件r+
将允许您写入除末尾之外的其他文件位置,同时a
强制a+
写入末尾。
解决方案 10:
如果你想附加到文件
with open("test.txt", "a") as myfile:
myfile.write("append me")
我们声明了变量myfile
来打开一个名为的文件test.txt
。Open 需要 2 个参数,一个是我们要打开的文件,另一个是代表我们要对文件执行的权限或操作类型的字符串
这是文件模式选项
模式描述
'r' 这是默认模式。它打开文件进行读取。
'w' 此模式打开文件进行写入。
如果文件不存在,它将创建一个新文件。
如果文件存在,它会截断该文件。
'x' 创建新文件。如果文件已存在,则操作失败。
'a' 以追加模式打开文件。
如果文件不存在,它将创建一个新文件。
't' 这是默认模式。它以文本模式打开。
'b' 以二进制模式打开。
'+'这将打开一个文件进行读写(更新)
解决方案 11:
如果多个进程正在写入文件,则必须使用追加模式,否则数据将被打乱。追加模式将使操作系统将每次写入都放在文件末尾,而不管写入者认为自己在文件中的位置在哪里。对于 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.
通过使用追加模式,操作系统会将任何写入内容放置在文件末尾。
f = open("logfile", "a"); f.seek(0, os.SEEK_END); f.write("data to write");
追加大多数内容并不意味着“打开文件,打开后转到文件末尾一次”。而是意味着“打开文件,我所做的每个写入都将在文件末尾”。
警告:要使此功能有效,您必须在一次写入调用中一次性写入所有记录。如果您将数据拆分为多个写入,其他写入者可能会在您的写入之间写入数据并破坏您的数据。
解决方案 12:
将更多文本附加到文件末尾的最简单方法是使用:
with open('/path/to/file', 'a+') as file:
file.write("Additions to file")
file.close()
语句a+
中的open(...)
指示以追加模式打开文件并允许读写访问。
file.close()
使用完所有打开的文件后,最好将其关闭。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件