如何使用Python检查文件是否存在?

如何在不使用try语句的情况下检查文件是否存在?

  1. 只是为了增加混淆,似乎以前建议的try:open()方法在Python中不起作用,因为文件访问不是排他性的,即使在写入文件时也是如此.
  2. 我想有一个很好的理由来检查一个文件的存在,就像你要求的一样,是否仅仅存在自己发送一个消息。而且没有阅读的意图,呃?
  3. @Tilman打开(),因为它没有规模,就需要关闭该文件,并具有改变文件的最后访问时间的副作用是不恰当的..

如果你正在检查的原因是你可以做这样的事情if file_exists: open_it(),那么使用try周围的尝试来打开它是比较安全的。检查然后打开文件被删除或移动的风险,或者当您检查和尝试打开文件时。

如果你不打算立即打开文件,你可以使用 os.path.isfile

True如果路径是现有的常规文件,则返回。这遵循符号链接,所以islink()isfile()对于相同的路径可以是true。

import os.path
os.path.isfile(fname) 

如果你需要确定它是一个文件。

从Python 3.4开始,pathlib模块提供了一个面向对象的方法(pathlib2在Python 2.7中被反向移植):

from pathlib import Path

my_file = Path("/path/to/file")
if my_file.is_file():
    # file exists

要检查一个目录,请执行:

if my_file.is_dir():
    # directory exists

要检查某个Path对象是否存在,而不管它是文件还是目录,请使用exists():

if my_file.exists():
    # path exists

你也可以resolve()在一个try块中使用:

try:
    my_abs_path = my_file.resolve():
except FileNotFoundError:
    # doesn't exist
else:
    # exists
  1. pathlib也回到2.7
  2. 官方的backport是pathlib2pathlib模块不再维护。
  3. 用一行检查缩短它os.path.isfile(file_path) and Path(str(file_path)).is_file()显然你需要添加进口ospathlib
  4. 我完全同意,没有理由只是检查一个文件的存在,除非它的存在本身就是一个信号。在这种情况下,最好有一个CSV文件,在其中写入一个指示信号的值 – 然后可以通过单个文件传送多个信号。
  5. 有时可能需要尝试/赶上,但我不认为这是一般的规则。当发生这样的严重异常时,您希望程序崩溃。所有其他的资源都应该由上下文管理器来处理,所以他们应该能够在未捕获的异常情况下处理自己。

你有这个os.path.exists功能:


import os.path
os.path.exists(file_path)

这将返回True文件和目录,但您可以改为使用os.path.isfile来测试它是否是一个特定的文件。它遵循符号链接。

不同isfile()exists()将返回True目录。
所以取决于如果你只想要纯文件或目录,你会使用isfile()exists()。这是一个简单的REPL输出。

>>> print os.path.isfile("/etc/password.txt")
True
>>> print os.path.isfile("/etc")
False
>>> print os.path.isfile("/does/not/exist")
False
>>> print os.path.exists("/etc/password.txt")
True
>>> print os.path.exists("/etc")
True
>>> print os.path.exists("/does/not/exist")
False

添加评论

友情链接:蝴蝶教程