在python内置的开放函数中,w、a、w+、a+和r+模式之间的确切区别是什么?

特别是,文档暗示所有这些都将允许写入文件,并表示它将打开文件以进行“附加”、“写入”和“更新”,但没有定义这些术语的含义。


当前回答

许多人特别疑惑的是“r+和w+模式之间有什么区别?”?

r+帮助您在不截断的情况下将数据读写到已经存在的文件上(如果没有这样的文件,则为错误)。

另一方面,w+模式也允许读取和写入,但它会截断文件(如果不存在这样的文件,则会创建一个新文件)。如果您想知道如何从截断的文件中读取,可以使用读取方法来读取新写入的文件(或空文件)。

干杯

其他回答

r r+ x x+ w w+ a a+
readable x x x x x
writeable x x x x x x x
default position: start x x x x x x
default position: end x x
must exist x x
mustn't exist x x
truncate (clear file) on load x x
Always write to EOF x x

Mode

t (default) b
str (io.TextIOBase) x
bytes (io.BufferedIOBase) x

如果未选择任何模式;使用文本模式(t)。因此,r与rt相同。

我注意到,我时不时地需要在谷歌上搜索一遍,只是为了在脑海中建立一个模式之间主要区别的形象。所以,我想下次看图表会更快。也许其他人也会觉得这很有用。

许多人特别疑惑的是“r+和w+模式之间有什么区别?”?

r+帮助您在不截断的情况下将数据读写到已经存在的文件上(如果没有这样的文件,则为错误)。

另一方面,w+模式也允许读取和写入,但它会截断文件(如果不存在这样的文件,则会创建一个新文件)。如果您想知道如何从截断的文件中读取,可以使用读取方法来读取新写入的文件(或空文件)。

干杯

我偶然发现了这一点,试图弄清楚为什么你会使用模式“w+”而不是“w”。最后,我只是做了一些测试。我看不出模式“w+”有多大用途,因为在这两种情况下,文件都是从开头截断的。然而,使用“w+”,您可以在写作后通过查找来阅读。如果尝试使用“w”进行任何读取,将引发IOError。在“w+”模式下不使用搜索进行读取不会产生任何结果,因为文件指针将在您写入的位置之后。

选项与C标准库中fopen函数的选项相同:

w截断文件,覆盖已经存在的内容

a附加到文件,添加到已经存在的文件中

w+打开用于读取和写入,截断文件,但也允许您读取已写入文件的内容

a+打开用于附加和读取,允许您附加到文件并读取其内容