Python如何优雅地从目录中获取4种指定后缀的对应文件
优化实现方案
方案1:推荐使用pathlib实现(Python 3.4+ 支持)
该方案路径处理更安全,且找到全部目标文件后会提前终止遍历,目录文件较多时效率更高:
from pathlib import Path # 配置目标后缀,后续增减后缀只需修改该字典即可 target_exts = {'.xml': None, '.csv': None, '.osgb': None, '.xodr': None} input_path = Path("替换为你的目标目录路径") for file in input_path.iterdir(): # 跳过非文件项 if not file.is_file(): continue # 取文件后缀,加lower兼容大写后缀场景,不需要可删除 ext = file.suffix.lower() # 仅当该后缀还未找到匹配文件时赋值 if ext in target_exts and target_exts[ext] is None: target_exts[ext] = str(file.absolute()) # 所有目标文件都已找到,提前终止循环 if all(v is not None for v in target_exts.values()): break # 直接按后缀取值即可 xml_filename = target_exts['.xml'] csv_filename = target_exts['.csv'] osgb_filename = target_exts['.osgb'] xodr_filename = target_exts['.xodr']
方案2:兼容旧版本Python的os模块实现
如果需要适配Python 3.4以下版本,可以用原生os模块实现:
import os target_exts = {'.xml': None, '.csv': None, '.osgb': None, '.xodr': None} input_path = "替换为你的目标目录路径" for file in os.listdir(input_path): file_path = os.path.join(input_path, file) if not os.path.isfile(file_path): continue ext = os.path.splitext(file)[1].lower() if ext in target_exts and target_exts[ext] is None: target_exts[ext] = file_path if all(v is not None for v in target_exts.values()): break
方案优势
- 可扩展性强:需要增减目标后缀时仅需修改
target_exts字典,无需调整判断逻辑 - 执行效率更高:找到全部目标文件后直接终止遍历,不需要扫描完整目录
- 路径处理更安全:内置路径拼接逻辑,自动适配不同操作系统的路径分隔符,避免手动字符串拼接导致的路径错误
- 兼容大写后缀:默认兼容
.XML/.CSV这类大写后缀场景,不需要可以删除.lower()调用
内容的提问来源于stack exchange,提问作者Creeper4004
相关产品推荐
相关产品推荐

