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

40

我需要打开一个文件进行读写操作。如果找不到该文件,应该创建它。同时,它还应该被视为 Windows 的二进制文件。你能告诉我需要使用哪种文件模式序列吗?

我尝试使用'r+ab',但如果找不到文件,它不会创建文件。

谢谢

2个回答

64

模式是ab+,其中r被隐含,而' a 'ppend和(' w 'write +'' r 'ead)是多余的。由于CPython(即常规Python)file基于C stdio 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'

2
可以了。还要感谢你在示例中指出os.SEEK_SET。我想我之前尝试过用a+打开文件,但无法读取任何内容。没有想到流被放置在文件的末尾... - Mihai Damian
1
请记住,在读取和写入之间,或者写入和读取之间,您必须始终进行寻址。忘记这样做通常在大多数系统上都可以工作,但在Windows等系统上可能会出现问题。 - Thomas Wouters

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

应该可以工作。它以追加/更新模式打开二进制文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接