检查文件是否存在和是否未创建的首选方法是什么?
当前回答
这对我来说是最好的办法。您可以检索所有现有的文件(无论是符号链接还是普通文件):
os.path.lexists(路径)
Return True if path refers to an existing path. Returns True for broken symbolic links. Equivalent to exists() on platforms lacking os.lstat().
New in version 2.4.
其他回答
检查路径是否存在文件。
os.path.isfile(路径)
如果path已经存在,则返回True 常规文件。这是象征性的 链接,所以islink()和 Isfile()可以为true 路径。
如果(当文件不存在时)希望将其创建为空,最简单的方法是
with open(thepath, 'a'): pass
(在Python 2.6或更高版本中;在2.5中,这需要在模块的顶部“从未来导入”)。
另一方面,如果你想在文件存在的情况下保留它,而在其他情况下放置特定的非空内容,那么基于If os.path.isfile(thepath):/else语句块的更复杂的方法可能更合适。
而不是os.path。isfile,由其他人建议,我建议使用os.path。Exists,它检查使用该名称的任何内容,而不仅仅是它是否是常规文件。
因此:
if not os.path.exists(filename):
file(filename, 'w').close()
另外:
file(filename, 'w+').close()
如果文件存在,后者将创建该文件,否则不创建。但是,如果文件存在,但您没有权限写入它,则会失败。这就是为什么我更喜欢第一个解决方案。
这对我来说是最好的办法。您可以检索所有现有的文件(无论是符号链接还是普通文件):
os.path.lexists(路径)
Return True if path refers to an existing path. Returns True for broken symbolic links. Equivalent to exists() on platforms lacking os.lstat().
New in version 2.4.
在我看来,这里的所有其他答案(到目前为止)都未能解决他们提出的解决方案中出现的竞争条件。
任何您首先检查文件是否存在,然后在程序的几行之后创建它的代码,都有在您不查看时创建文件并给您带来问题的风险(或者您给“其他文件”的所有者带来问题)。
如果你想避免这类事情,我会建议如下(未经测试):
import os
def open_if_not_exists(filename):
try:
fd = os.open(filename, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
except OSError, e:
if e.errno == 17:
print e
return None
else:
raise
else:
return os.fdopen(fd, 'w')
如果文件还不存在,这将打开文件进行写入,并返回一个文件-对象。如果它确实存在,它将打印“Ooops”并返回None(未经测试,仅基于阅读python文档,因此可能不是100%正确)。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录