如何在不使用try语句的情况下检查文件是否存在?
只是为了增加混淆,似乎以前建议的try:open()方法在Python中不起作用,因为文件访问不是排他性的,即使在写入文件时也是如此.
我想有一个很好的理由来检查一个文件的存在,就像你要求的一样,是否仅仅存在自己发送一个消息。而且没有阅读的意图,呃?
@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
pathlib也回到2.7
官方的backport是pathlib2,pathlib模块不再维护。
用一行检查缩短它os.path.isfile(file_path) and Path(str(file_path)).is_file()显然你需要添加进口os和pathlib
我完全同意,没有理由只是检查一个文件的存在,除非它的存在本身就是一个信号。在这种情况下,最好有一个CSV文件,在其中写入一个指示信号的值 – 然后可以通过单个文件传送多个信号。
有时可能需要尝试/赶上,但我不认为这是一般的规则。当发生这样的严重异常时,您希望程序崩溃。所有其他的资源都应该由上下文管理器来处理,所以他们应该能够在未捕获的异常情况下处理自己。
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