Python 3中open(..., mode)的模式是什么?它可以打开一个文件并:
- 如果不存在则创建
- 不截断已有内容
- 二进制模式
我尝试了r+b
,但在文件不存在时会失败,w+b
会截断内容,a+b
似乎将所有写操作都变为追加,而我需要覆盖一些数据。
Python 3中open(..., mode)的模式是什么?它可以打开一个文件并:
我尝试了r+b
,但在文件不存在时会失败,w+b
会截断内容,a+b
似乎将所有写操作都变为追加,而我需要覆盖一些数据。
open()
实现此功能!Python的open()
类似于C中的fopen()
API,但都没有这个功能。
请注意,您发布的try
/except
方法存在竞争条件:
文件可以在两次调用之间被创建,并且突然您将使用第二个调用截断它。
os.open()
和os.fdopen()
实现您想要的功能:fd = os.open(path, os.O_CREAT | os.O_RDWR | os.O_BINARY)
if fd != -1:
f = os.fdopen(fd, 'r+b') # Now use 'f' normally; it'll close `fd` itself
一种解决方法是捕获异常并使用另一种模式打开。如果有更好的解决方案,我仍然会接受。
try:
self.file = open(filename, "r+b")
except FileNotFoundError:
self.file = open(filename, "w+b")