检查文件是否存在和是否未创建的首选方法是什么?
当前回答
检查路径是否存在文件。
os.path.isfile(路径)
如果path已经存在,则返回True 常规文件。这是象征性的 链接,所以islink()和 Isfile()可以为true 路径。
其他回答
这对我来说是最好的办法。您可以检索所有现有的文件(无论是符号链接还是普通文件):
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%正确)。
而不是os.path。isfile,由其他人建议,我建议使用os.path。Exists,它检查使用该名称的任何内容,而不仅仅是它是否是常规文件。
因此:
if not os.path.exists(filename):
file(filename, 'w').close()
另外:
file(filename, 'w+').close()
如果文件存在,后者将创建该文件,否则不创建。但是,如果文件存在,但您没有权限写入它,则会失败。这就是为什么我更喜欢第一个解决方案。
如果(当文件不存在时)希望将其创建为空,最简单的方法是
with open(thepath, 'a'): pass
(在Python 2.6或更高版本中;在2.5中,这需要在模块的顶部“从未来导入”)。
另一方面,如果你想在文件存在的情况下保留它,而在其他情况下放置特定的非空内容,那么基于If os.path.isfile(thepath):/else语句块的更复杂的方法可能更合适。
检查路径是否存在文件。
os.path.isfile(路径)
如果path已经存在,则返回True 常规文件。这是象征性的 链接,所以islink()和 Isfile()可以为true 路径。
推荐文章
- 如何读取文件的前N行?
- 如何删除matplotlib中的顶部和右侧轴?
- 解析.py文件,读取AST,修改它,然后写回修改后的源代码
- Visual Studio Code:如何调试Python脚本的参数
- 使用元组/列表等等。从输入vs直接引用类型如list/tuple/etc
- 结合conda环境。Yml和PIP requirements.txt
- 将命名元组转换为字典
- 如何使x轴和y轴的刻度相等呢?
- Numpy在这里函数多个条件
- 在Python中,使用argparse只允许正整数
- 如何排序mongodb与pymongo
- 不可变与可变类型
- 列表是线程安全的吗?
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- 操作系统。makdirs在我的路径上不理解“~”