创建+读取+追加+二进制的文件模式

40 投票
2 回答
70105 浏览
提问于 2025-04-15 22:17

我需要打开一个文件,用来读和写。如果找不到这个文件,就应该创建一个。同时在Windows系统上,这个文件应该以二进制格式处理。你能告诉我应该使用什么样的文件模式吗?

我试过用'r+ab',但是如果文件不存在,它并不会创建文件。

谢谢!

2 个回答

8
open("filename", "a+b")

应该可以正常工作。这段代码是用来以追加或更新的方式打开一个二进制文件。

64

这里提到的模式是 ab+,其中的 r 是隐含的,'a' 代表追加,而 ('w' 代表写入和 'r' 代表读取) 是多余的。因为 CPython(也就是我们常用的 Python)中的 file 是基于 C 语言的标准输入输出类型 FILE,下面是来自 fopen(3) 手册的一些相关内容:

  • w+ 这个模式是用来同时读取和写入的。 如果文件不存在,就会创建一个新的文件;如果文件已经存在,内容会被清空。 文件的读取位置会在文件的开头。

  • a+ 这个模式是用来读取和追加内容(在文件末尾写入)。 如果文件不存在,也会创建一个新的文件。 读取时的位置在文件的开头,但写入的内容总是追加到文件的末尾。

加上 "b" 是为了让 DOS 系统开心。可以推测你想做的事情大概是这样的:

>>> f = open('junk', 'ab+')
>>> f
<open file 'junk', mode 'ab+' at 0xb77e6288>
>>> f.write('hello\n')
>>> f.seek(0, os.SEEK_SET)
>>> f.readline()
'hello\n'
>>> f.write('there\n')
>>> f.seek(0, os.SEEK_SET)
>>> f.readline()
'hello\n'
>>> f.readline()
'there\n'

撰写回答