是否有一个选项,我可以传递open(),当试图写一个不存在的文件时会导致IOerror ?我正在使用python通过符号链接读取和写入块设备,如果链接丢失,我想引发一个错误,而不是创建一个常规文件。我知道我可以添加一个检查来查看文件是否存在并手动引发错误,但如果它存在,我更愿意使用内置的东西。
当前代码是这样的:
device = open(device_path, 'wb', 0)
device.write(data)
device.close()
是。
open(path, 'r+b')
指定"r"选项表示该文件必须存在并且可以读取。指定"+"表示您可以写入,并且您将被定位在末尾。打开https://docs.python.org/3/library/functions.html?
使用os.path.islink()
或os.path.isfile()
检查文件是否存在
每次检查都很麻烦,但是您总是可以将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)
标题>恐怕你不能使用open()
函数执行文件存在性检查并引发错误。
下面是python中open()
的签名,其中name
是文件名,mode
是访问模式,buffering
表示访问文件时是否执行缓冲。
open(name[, mode[, buffering]])
您可以检查文件是否存在。
>>> import os
>>> os.path.isfile(file_name)
这将根据文件是否存在返回True
或False
。要专门测试一个文件,可以使用this。
>>> os.path.exists(file_path)