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

Python遍历多级目录读取smm_logs日志路径的代码问题求解

问题场景

目标读取D:\Coding\iroiro\ChuckRep路径下的两类日志:目录下有a、b、c、d四个非日志文件夹,以及e、f、g、h四个存储日志的子文件夹,日志分别是C000类.smm_logs文件、文件名带W标识的.smm_logs文件,需要遍历所有日志目录,正确输出两类日志的完整路径。

原代码存在的错误
  • 通配路径层级错误:写的./ChuckRep/*/*/会匹配两层子目录,实际日志只存在于ChuckRep下的一级子文件夹(e/f/g/h)中,多写一层通配符根本扫不到目标目录
  • 扩展名判断逻辑完全失效:os.path.splitext是对写死的通配字符串做拆分,不是对实际遍历到的文件操作,拿到的ext是空值,永远进不了后续的日志匹配逻辑
  • 路径拼接方式错误:靠对固定字符串做[:-4]切片拼接路径,既不兼容Windows路径分隔符,也容易因为字符串长度变化出现索引错误、路径拼接错乱
  • 无容错处理:直接取glob匹配结果的第一个元素,只要某个目录下缺C000日志就会直接抛索引错误中断运行
修正后可运行代码
import os
import glob

# 配置日志根目录,用绝对路径避免工作目录变动导致匹配失败
root_dir = r'D:\Coding\iroiro\ChuckRep'

# 遍历根目录下所有一级子项
for item_path in glob.glob(os.path.join(root_dir, '*')):
    # 跳过文件,只处理子文件夹
    if not os.path.isdir(item_path):
        continue
    # 匹配当前文件夹下的两类目标日志
    cfile_list = glob.glob(os.path.join(item_path, 'C000*.smm_logs'))
    wfile_list = glob.glob(os.path.join(item_path, '*W*.smm_logs'))

    # 输出匹配结果
    if cfile_list:
        cfile_path = cfile_list[0]
        print(f'C000类日志路径:{cfile_path}')
    if wfile_list:
        for wfile_path in wfile_list:
            print(f'W类smm_logs日志路径:{wfile_path}')
调整点说明
  • 路径匹配层级修正为一级子目录,和实际日志存储结构一致
  • 用os.path.join做路径拼接,自动适配Windows系统的反斜杠路径分隔符,不需要手动处理字符串切片
  • 移除了无效的全局扩展名判断,改为在每个子文件夹内单独匹配对应规则的日志,匹配规则和日志命名特征完全对应
  • 增加目录类型校验,自动跳过根目录下的非文件夹项,不会误扫无关目录内容
  • 增加匹配结果非空判断,不会因为某个目录缺日志就直接报错中断

内容的提问来源于stack exchange,提问作者Kodasol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:51:18