是否有一个选项我可以传递open(),在尝试编写不存在的文件时会导致IOerror?我正在使用python通过符号链接读取和写入块设备,如果链接丢失,我想引发错误而不是创建常规文件。我知道我可以添加一个检查以查看该文件是否存在并手动引发错误,但是如果它存在则更愿意使用内置的东西。
当前代码如下所示:
device = open(device_path, 'wb', 0)
device.write(data)
device.close()
答案 0 :(得分:2)
使用os.path.islink()
或os.path.isfile()
检查文件是否存在。
答案 1 :(得分:2)
每次进行检查都很麻烦,但您始终可以包裹open()
:
import os
def open_if_exists(*args, **kwargs):
if not os.path.exists(args[0]):
raise IOError('{:s} does not exist.'.format(args[0]))
f = open(*args, **kwargs)
return f
f = open_if_exists(r'file_does_not_exist.txt', 'w+')
这只是快速而肮脏的,所以不允许使用:with open_if_exists(...)
。
缺乏上下文管理器困扰着我,所以这里有:
import os
from contextlib import contextmanager
@contextmanager
def open_if_exists(*args, **kwargs):
if not os.path.exists(args[0]):
raise IOError('{:s} does not exist.'.format(args[0]))
f = open(*args, **kwargs)
try:
yield f
finally:
f.close()
with open_if_exists(r'file_does_not_exist.txt', 'w+') as f:
print('foo', file=f)
答案 2 :(得分:1)
我担心您无法使用open()
功能执行文件存在检查并引发错误。
下面是python中open()
的签名,其中name
是file_name,mode
是访问模式,buffering
表示访问时是否要执行缓冲一份文件。
open(name [,mode [,buffering]])
相反,您可以检查文件是否存在。
>>> import os
>>> os.path.isfile(file_name)
这将返回True
或False
,具体取决于文件是否存在。要专门测试文件,可以使用它。
要测试文件和目录是否存在,您可以使用:
>>> os.path.exists(file_path)
答案 3 :(得分:1)
是。
open(path, 'r+b')
指定" r"选项意味着文件必须存在,您可以阅读。 指定" +"意味着你可以写,并且你将在最后定位。 https://docs.python.org/3/library/functions.html?#open