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

遍历目录读取指定.gz日志文件并执行内容检测的问题排查

遍历子目录检测压缩日志文件内容的修复方案

原代码的问题在于使用exit(),一旦找到第一个包含"CODE"的文件就直接终止程序,没法继续处理后续的日志文件。下面是修正后的代码,能遍历所有file.log.gz文件并输出每个文件的检测结果:

import os
import sys
import gzip

if len(sys.argv) < 2:
    print("请传入目标路径参数")
    sys.exit(1)

base_path = sys.argv[1]
directory = os.path.join(base_path, "NEW_FOLDER")

for root, dirs, files in os.walk(directory):
    for file_name in files:
        if file_name == "file.log.gz":  # 精确匹配文件名更严谨
            file_path = os.path.join(root, file_name)
            print(file_path)
            found_code = False
            with gzip.open(file_path, 'rt', encoding='utf-8') as fin:
                # 直接以文本模式打开,避免手动decode
                for line in fin:
                    if "CODE" in line:
                        found_code = True
                        break  # 找到后跳出当前文件的行循环,不用继续读
            print("string is present" if found_code else "string is not present")

关键修改点:

  • 移除exit(),改用break跳出当前文件的行循环,继续处理下一个文件
  • 每个文件处理前初始化found_code为False,单独记录当前文件的检测状态
  • 先打印文件的完整路径,再输出对应的检测结果
  • 使用gzip.open的文本模式('rt')直接读取字符串,省去手动decode('utf-8')的步骤
  • 用精确匹配file_name == "file.log.gz"代替包含判断,避免匹配到类似xxxfile.log.gz的无关文件
  • 增加参数检查,避免未传参时出错

修正后运行的输出示例:

/NEW_FOLDER/dir1/file.log.gz
string is present
/NEW_FOLDER/dir2/file.log.gz
string is present
/NEW_FOLDER/dir3/file.log.gz
string is not present

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:05:18