遍历目录读取指定.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
相关产品推荐
相关产品推荐

