Python 3中open(..., mode)打开文件
的模式是什么我测试了r+b
,但是在丢失文件时失败,w+b
截断它,a+b
似乎将所有写入转换为追加,而我需要覆盖一些数据。
答案 0 :(得分:1)
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
答案 1 :(得分:0)
解决方法是捕获异常并使用其他模式打开。我仍然会接受更好的解决方案。
try:
self.file = open(filename, "r+b")
except FileNotFoundError:
self.file = open(filename, "w+b")