能否使用os.path.exists匹配通配符路径?求文件存在性检查方案
如何检查目录中符合通配符规则的文件是否存在
你说得对,os.path.exists确实不支持通配符匹配,你的实现思路是可行的,但需要修正一些细节,这里提供几种不同场景的实现方案:
基础通配符匹配(简单场景)
如果只需要匹配*-data.db格式的文件,用glob.glob完全可以,注意路径拼接时要传入字符串路径,修正后的代码如下:
import os import glob target_dir = "/path/to/dir" filename_pattern = "*-data.db" # 正确拼接路径,确保目录路径是字符串类型 full_pattern = os.path.join(target_dir, filename_pattern) matching_files = glob.glob(full_pattern) # 检查是否存在匹配文件 if matching_files: print(f"找到匹配文件: {matching_files}") else: print("未找到符合规则的文件") # 如果你想用assert做断言(适合测试场景) # assert matching_files, "未找到符合YYYY-MM-DD-data.db格式的文件"
严格匹配YYYY-MM-DD日期格式
如果需要确保文件名开头是四位年-两位月-两位日的标准格式(避免匹配到类似2024-1-1-data.db这种不规范的文件名),可以结合正则表达式过滤结果:
方法1:os.listdir + fnmatch + 正则
import os import fnmatch import re target_dir = "/path/to/dir" # 定义严格的日期文件名正则 date_file_regex = re.compile(r"^\d{4}-\d{2}-\d{2}-data\.db$") matching_files = [] for filename in os.listdir(target_dir): # 先通配符初筛,再正则精确匹配 if fnmatch.fnmatch(filename, "*-data.db") and date_file_regex.match(filename): matching_files.append(os.path.join(target_dir, filename)) if matching_files: print(f"找到符合严格日期格式的文件: {matching_files}") else: print("未找到符合严格YYYY-MM-DD-data.db格式的文件")
方法2:用pathlib(Python 3.4+推荐)
pathlib提供了更简洁的路径操作API,结合正则过滤的写法更直观:
from pathlib import Path import re target_dir = Path("/path/to/dir") date_file_regex = re.compile(r"^\d{4}-\d{2}-\d{2}-data\.db$") # 先glob初筛,再用正则匹配文件名 matching_files = [file for file in target_dir.glob("*-data.db") if date_file_regex.match(file.name)] if matching_files: print(f"找到匹配文件: {matching_files}") else: print("未找到符合规则的文件")
注意事项
- 生产环境建议用
if判断替代assert,因为assert在Python优化模式(-O参数)下会被忽略,且触发后直接终止程序,不利于异常处理 - 如果目录下文件极多,
glob.glob会一次性加载所有匹配文件到内存,此时可以用glob.iglob返回迭代器,减少内存占用
内容的提问来源于stack exchange,提问作者24n8
相关产品推荐
相关产品推荐

