如何在一个变量中同时在python中以读取和追加模式打开文件

时间:2019-05-30 15:19:27

标签: python file

如果我们使用'r',它将读取文件'w'从头开始写入文件,并且'a'将追加 如何在阅读中同时打开并追加

错误:在此>>     打开(“文件名”,“ r,a”)

open("filename", "w")
open("filename", "r")
open("filename", "a")

错误: 无效模式:“ a,r”

2 个答案:

答案 0 :(得分:0)

您无法使用文本文件执行此操作。您想阅读它还是要写它。 ar指定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")