如果我们使用'r',它将读取文件'w'从头开始写入文件,并且'a'将追加 如何在阅读中同时打开并追加
错误:在此>> 打开(“文件名”,“ r,a”)
open("filename", "w")
open("filename", "r")
open("filename", "a")
错误: 无效模式:“ a,r”
答案 0 :(得分:0)
您无法使用文本文件执行此操作。您想阅读它还是要写它。 a
或r
指定seek
到文件中的特定位置。同时指定两者都要求open
同时指向文件中的两个不同位置。
文本文件通常无法就地更新。您可以使用a
在末尾添加新内容,仅此而已。要执行我认为想要的操作,您需要以读取模式打开现有文件,并以写入模式打开另一个新文件,并将数据从一个复制到另一个。
之后,您将拥有两个文件,因此您必须注意删除旧文件。如果那很麻烦,请查看模块in-place
。
另一种选择是将输入文件读入内存,关闭并重新打开以进行写入,然后写出新版本的文件。然后,您不必删除旧副本。但是,如果中间出现问题,您将没有旧的输入文件,因为您删除了它,也没有新的输出文件,因为您没有成功写入它。
其原因是文本文件不是为随机访问而设计的。
答案 1 :(得分:0)
您正在寻找r+
或a+
模式,该模式允许对文件(see more)进行读写操作。
使用r+
,该位置最初位于开头,但是读取一次会将其推向结尾,从而允许您追加。对于a+
,该位置最初位于末尾。
with open("filename", "r+") as f:
text = f.read()
f.write("stuff to append")
如果需要重新读取整个内容,则可以执行f.seek(0)
返回到起始位置。
with open("filename", "r+") as f:
text = f.read()
f.write("stuff to append")
f.seek(0)
text = f.read()
assert text.endswith("stuff to append")