Python,如果存在则打开写入,否则引发错误



是否有一个选项,我可以传递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)

这将根据文件是否存在返回TrueFalse。要专门测试一个文件,可以使用this。

要测试文件和目录是否存在,可以使用:
>>> os.path.exists(file_path)

相关内容

  • 没有找到相关文章

最新更新