检查文件是否存在和是否未创建的首选方法是什么?
当前回答
这对我来说是最好的办法。您可以检索所有现有的文件(无论是符号链接还是普通文件):
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.
其他回答
如果(当文件不存在时)希望将其创建为空,最简单的方法是
with open(thepath, 'a'): pass
(在Python 2.6或更高版本中;在2.5中,这需要在模块的顶部“从未来导入”)。
另一方面,如果你想在文件存在的情况下保留它,而在其他情况下放置特定的非空内容,那么基于If os.path.isfile(thepath):/else语句块的更复杂的方法可能更合适。
检查路径是否存在文件。
os.path.isfile(路径)
如果path已经存在,则返回True 常规文件。这是象征性的 链接,所以islink()和 Isfile()可以为true 路径。
而不是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%正确)。
推荐文章
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录
- 我如何告诉matplotlib我已经完成了一个情节?
- 如何在Python中记录源文件名称和行号
- Python: List vs Dict用于查找表
- 试图在Windows 10上运行Python时出现“权限被拒绝”
- 如何在Django中设置时区
- 即使模板文件存在,Flask也会引发TemplateNotFound错误
- defaultdict的嵌套defaultdict
- 构造tkinter应用程序的最佳方法?