检查文件是否存在最直接的方法是使用os.path.exists(),而更现代的方式是使用pathlib模块的Path.exists()方法。两种方式均可判断路径是否存在,但pathlib提供更直观、面向对象的API,支持链式调用和跨平台兼容,推荐用于复杂路径操作。

Python要检查一个文件是否存在,最直接的方法是使用
os.path.exists()
os.path.isfile()
os.path.isdir()
pathlib
Path
exists()
is_file()
is_dir()
在Python中,检查文件或目录是否存在,我们通常有两种主要途径,各有其适用场景和特点。
传统方式:使用os.path
os.path
立即学习“Python免费学习笔记(深入)”;
os.path.exists(path)
True
Path
False
import os
file_name = "example.txt"
directory_name = "my_folder"
non_existent_path = "non_existent.md"
# 假设 example.txt 和 my_folder 存在
if os.path.exists(file_name):
print(f"'{file_name}' 存在。") # 输出:'example.txt' 存在。
else:
print(f"'{file_name}' 不存在。")
if os.path.exists(directory_name):
print(f"'{directory_name}' 存在。") # 输出:'my_folder' 存在。
else:
print(f"'{directory_name}' 不存在。")
if os.path.exists(non_existent_path):
print(f"'{non_existent_path}' 存在。")
else:
print(f"'{non_existent_path}' 不存在。") # 输出:'non_existent.md' 不存在。os.path.isfile(path)
Path
True
False
os.path.isdir(path)
Path
True
False
import os
file_name = "example.txt"
directory_name = "my_folder"
if os.path.isfile(file_name):
print(f"'{file_name}' 是一个文件。") # 输出:'example.txt' 是一个文件。
else:
print(f"'{file_name}' 不是一个文件。")
if os.path.isdir(directory_name):
print(f"'{directory_name}' 是一个目录。") # 输出:'my_folder' 是一个目录。
else:
print(f"'{directory_name}' 不是一个目录。")现代方式:使用pathlib
pathlib
Path.exists()
os.path.exists()
Path.is_file()
Path.is_dir()
from pathlib import Path
file_path_obj = Path("example.txt")
dir_path_obj = Path("my_folder")
non_existent_path_obj = Path("another_missing.log")
if file_path_obj.exists():
print(f"路径 '{file_path_obj}' 存在。") # 输出:路径 'example.txt' 存在。
if dir_path_obj.is_dir():
print(f"路径 '{dir_path_obj}' 是一个目录。") # 输出:路径 'my_folder' 是一个目录。
if not non_existent_path_obj.exists():
print(f"路径 '{non_existent_path_obj}' 不存在。") # 输出:路径 'another_missing.log' 不存在。pathlib
当我开始用
pathlib
首先,面向对象的API让路径操作更自然。你不再需要像
os.path.join(dir, file)
/
Path('/home') / 'user' / 'documents' / 'report.pdf'其次,
pathlib
path_obj.exists()
path_obj.is_file()
path_obj.is_dir()
os.path
再者,
pathlib
\
/
Path
我个人觉得,
pathlib
path_obj.parent
path_obj.name
path_obj.suffix
os.path
pathlib
os.path
os.path.exists()
pathlib
即便文件存在性检查看起来很简单,但在实际开发中,我们还是会遇到一些“坑”,如果处理不当,可能会导致程序行为异常或产生难以调试的bug。
一个最常见的陷阱就是竞态条件(Race Condition)。想象一下这样的场景:你的代码先用
os.path.exists()
exists()
True
FileNotFoundError
我的建议是:对于文件操作,特别是读写操作,尽量避免“先检查后操作”的模式,而应该采取“直接操作,然后捕获异常”的策略。 Python的文件操作函数(如
open()
FileNotFoundError
PermissionError
try...except
try:
with open("potentially_missing.txt", "r") as f:
content = f.read()
print("文件内容:", content)
except FileNotFoundError:
print("文件不存在,无法读取。")
except PermissionError:
print("没有权限读取文件。")
except Exception as e:
print(f"读取文件时发生未知错误:{e}")另一个需要注意的点是符号链接(Symbolic Links)。
os.path.exists()
Path.exists()
False
os.path.islink()
Path.is_symlink()
import os
from pathlib import Path
# 假设存在一个名为 'link_to_file.txt' 的符号链接,指向 'original_file.txt'
# 且 'original_file.txt' 存在
# 如果 'original_file.txt' 被删除了,'link_to_file.txt' 就成了断开的链接
# 检查符号链接本身是否存在
if os.path.islink("link_to_file.txt"):
print("'link_to_file.txt' 是一个符号链接。")
if Path("link_to_file.txt").is_symlink():
print("Path('link_to_file.txt') 是一个符号链接。")
# 检查符号链接的目标是否存在 (exists() 会跟随链接)
if os.path.exists("link_to_file.txt"):
print("'link_to_file.txt' 的目标存在。") # 如果目标存在则为True最后,文件系统权限也是一个隐形的陷阱。
exists()
exists()
True
PermissionError
PermissionError
当然可以!Python提供了丰富的工具来深入了解文件的各种属性,而不仅仅是它的存在与否。这些信息在很多场景下都非常有用,比如版本控制、缓存管理或者日志分析。
文件大小: 我们可以通过
os.path.getsize(path)
pathlib
Path.stat().st_size
import os
from pathlib import Path
file_name = "example.txt" # 假设这个文件存在
if os.path.exists(file_name):
size_bytes = os.path.getsize(file_name)
print(f"文件 '{file_name}' 的大小是 {size_bytes} 字节。")
path_obj = Path(file_name)
if path_obj.exists():
size_bytes_pathlib = path_obj.stat().st_size
print(f"通过 pathlib 获取,文件 '{file_name}' 的大小是 {size_bytes_pathlib} 字节。")文件访问/修改/创建时间: 时间戳在很多场景下都非常关键。
os.path.getmtime(path)
os.path.getatime(path)
os.path.getctime(path)
datetime
pathlib
Path.stat()
path_obj.stat().st_mtime
import os
import datetime
from pathlib import Path
file_name = "example.txt"
if os.path.exists(file_name):
mtime_timestamp = os.path.getmtime(file_name)
atime_timestamp = os.path.getatime(file_name)
ctime_timestamp = os.path.getctime(file_name)
print(f"'{file_name}' 最后修改时间: {datetime.datetime.fromtimestamp(mtime_timestamp)}")
print(f"'{file_name}' 最后访问时间: {datetime.datetime.fromtimestamp(atime_timestamp)}")
print(f"'{file_name}' 创建/元数据修改时间: {datetime.datetime.fromtimestamp(ctime_timestamp)}")
path_obj = Path(file_name)
if path_obj.exists():
print(f"通过 pathlib 获取,'{file_name}' 最后修改时间: {datetime.datetime.fromtimestamp(path_obj.stat().st_mtime)}")文件权限:
os.access(path, mode)
os.R_OK
os.W_OK
os.X_OK
os.F_OK
os.path.exists()
import os
file_name = "example.txt"
if os.access(file_name, os.R_OK):
print(f"'{file_name}' 可读。")
else:
print(f"'{file_name}' 不可读。")
if os.access(file_name, os.W_OK):
print(f"'{file_name}' 可写。")
else:
print(f"'{file_name}' 不可写。")请注意,
os.access()
更详细的文件类型判断: 除了
is_file()
is_dir()
以上就是Python怎么检查一个文件是否存在_Python文件存在性检查方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号