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

Are*_*ski 8 file mode python-3.x

Python 3 中open(..., mode)的模式是什么,它打开一个文件

  • 如果不存在则创建
  • 不要截断
  • 二进制模式

我测试过r+b,但在丢失文件时失败,w+b截断它,并且a+b似乎将所有写入转换为附加,而我需要覆盖一些数据。

Meh*_*dad 8

这是 C 和 Python 的巨大缺陷。没有办法通过 来做到这一点open()

Python的open()就像fopen()C中的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
Run Code Online (Sandbox Code Playgroud)