Python 打开或创建的 open() 标志

Python open() flags for open or create

open(..., mode) 在 Python 3 中打开一个文件

的模式是什么

我测试了 r+b,但在丢失文件时失败了,w+b 截断了它,a+b 似乎将所有写入都变成了追加,而我需要覆盖一些数据。

解决方法是捕获异常并以另一种模式打开。我仍然会接受更好的解决方案。

try:
    self.file = open(filename, "r+b")
except FileNotFoundError:
    self.file = open(filename, "w+b")

这是 C 和 Python 中的一个巨大缺陷。无法通过 open()!!

执行此操作

Python的open()就像C里的fopen()API一样,都没有这个能力。

请注意,您发布的 try/except 方法存在 竞争条件 :
该文件可以在两次调用之间创建,突然您会在第二次调用时截断它。

但是:您可以使用 os.open()os.fdopen():[=22= 来实现您想要的效果]
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