You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:24:01