在 Python 程序中稳健地处理文件需要一种可靠的方法来检查文件是否存在,然后再尝试任何操作。这可以防止出现意外错误,并提高代码的整体稳定性。Python 提供了几种方法来实现这一点,每种方法都有其自身的优点和缺点。本文探讨了三种常见且有效的方法:
目录
使用 os.path.isfile()
os.path.isfile()
函数在所有 Python 版本中都可用,它提供了一种直接且有效的方法来检查文件是否存在且是否为常规文件(而不是目录或其他特殊文件类型)。由于其简单性和速度,它通常是首选方法。
import os
def file_exists(filepath):
"""使用 os.path.isfile() 检查文件是否存在。
Args:
filepath: 文件路径。
Returns:
如果文件存在且是常规文件,则返回 True;否则返回 False。
"""
return os.path.isfile(filepath)
filepath = "my_file.txt"
if file_exists(filepath):
print(f"文件 '{filepath}' 存在。")
else:
print(f"文件 '{filepath}' 不存在。")
使用 pathlib.Path.is_file()
对于 Python 3.4 及更高版本,pathlib
模块提供了一种更现代化和面向对象的方法。Path.is_file()
方法提供了一种简洁易读的方式来执行相同的检查。
from pathlib import Path
def file_exists(filepath):
"""使用 pathlib.Path.is_file() 检查文件是否存在。
Args:
filepath: 文件路径。
Returns:
如果文件存在且是常规文件,则返回 True;否则返回 False。
"""
return Path(filepath).is_file()
filepath = "my_file.txt"
if file_exists(filepath):
print(f"文件 '{filepath}' 存在。")
else:
print(f"文件 '{filepath}' 不存在。")
为什么避免使用 try...except
检查文件是否存在
虽然可以使用 try...except
块来检查 FileNotFoundError
,但这对于检查文件是否存在通常是不推荐的。它效率较低,因为它涉及尝试打开文件,即使你只需要知道它是否存在。此外,它可能会掩盖其他可能指示文件访问存在不同问题的 IOError
异常,从而使调试更加困难。
建议: 优先使用 os.path.isfile()
,因为它具有广泛的兼容性和效率,或者在 Python 3.4+ 中使用 pathlib.Path.is_file()
以获得更简洁的代码。