如何追加到文件而不是覆盖它?
当前回答
如果要附加到文件
with open("test.txt", "a") as myfile:
myfile.write("append me")
我们声明了变量myfile以打开名为test.txt的文件。open有两个参数,一个是要打开的文件,另一个是表示要对该文件执行的权限或操作类型的字符串
以下是文件模式选项
Mode Description 'r' This is the default mode. It Opens file for reading. 'w' This Mode Opens file for writing. If file does not exist, it creates a new file. If file exists it truncates the file. 'x' Creates a new file. If file already exists, the operation fails. 'a' Open file in append mode. If file does not exist, it creates a new file. 't' This is the default mode. It opens in text mode. 'b' This opens in binary mode. '+' This will open a file for reading and writing (updating)
其他回答
您需要以追加模式打开文件,将“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(流,0,SEEK_END);
旧的简化答案(不与一起使用):
示例:(在实际程序中,使用关闭文件-请参阅文档)
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
将open()中的模式设置为“a”(追加)而不是“w”(写入):
with open("test.txt", "a") as myfile:
myfile.write("appended text")
文档列出了所有可用模式。
当我们使用这行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")
您可能希望传递“a”作为模式参数。请参阅open()的文档。
with open("foo", "a") as f:
f.write("cool beans...")
对于更新(+)、截断(w)和二进制(b)模式,模式参数还有其他排列,但最好以“a”开头。
有时,初学者会遇到这个问题,因为他们试图在循环中打开和写入文件:
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))
推荐文章
- Python dataframe pandas使用int删除列
- 如何使用批处理文件写入文本文件?
- 使用os.walk()在Python中递归遍历目录
- Git复制文件保存历史
- 在Python中,什么时候“i += x”与“i = i + x”不同?
- Python Flask,如何设置内容类型
- 删除字符串中的字符列表
- 当你的应用程序有一个tests目录时,在Django中运行一个特定的测试用例
- 如何合并一个透明的png图像与另一个图像使用PIL
- 使用散射数据集生成热图
- python:将脚本工作目录更改为脚本自己的目录
- 如何以编程方式获取python.exe位置?
- 如何跳过循环中的迭代?
- 使用Pandas为字符串列中的每个值添加字符串前缀
- ImportError:没有名为matplotlib.pyplot的模块