这是C&蟒蛇没有办法通过
但是:您可以使用
Python 3中打开
- 如果不存在则创建
- 不要截断
- 二进制模式
我测试了r+b
,但由于缺少文件而失败,w+b
截断了它,而a+b
似乎将所有写入变成了附加,而我需要覆盖一些数据。
这是C&蟒蛇没有办法通过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")