我尝试了 r+
和 a+
用于打开文件并读/写,但是 'r+' 和 'a+' 都是将字符串追加到文件末尾。
那么,r+
和 a+
有什么区别呢?
补充说明:
我已经找到了原因:
我读取了文件对象却忘记使用 seek(0) 将位置设置为开头了。
我尝试了 r+
和 a+
用于打开文件并读/写,但是 'r+' 和 'a+' 都是将字符串追加到文件末尾。
那么,r+
和 a+
有什么区别呢?
补充说明:
我已经找到了原因:
我读取了文件对象却忘记使用 seek(0) 将位置设置为开头了。
Python以与C语言相同的方式打开文件:
r+
读写模式。文件流定位于文件开头。
a+
读取并追加(在文件末尾写入)。如果文件不存在,则创建该文件。 读取时文件位置在文件开头,但输出会被追加到文件末尾(但在某些Unix系统中不管当前寻址位置如何)。
a+
并不完全像C语言中的方式那样工作。请注意,本文只是翻译,不包含任何解释或额外内容。 - Eric O. Lebigotfopen
在某些 Unix中是否具有相同的行为。然而,由于open
函数具有附加模式(U
,rU
),我们可以在答案中添加“几乎”。 - VisioN一个区别是,对于r+
,如果文件不存在,则不会被创建并且打开失败。但是对于a+
,如果文件不存在,则会创建该文件。
C
中使用过它们,那么它们几乎与 C
中的相同。fopen()
函数的 manpage:
r+
:- 读写打开。流定位于文件开头。a+
:- 读写打开。如果文件不存在,则创建该文件。流定位于文件末尾。随后对文件的写入将始终结束于当前的文件末尾,而不管任何介于其中的fseek(3)
或类似函数。