Python如何按日期拆分日志文件数据并导出到不同文件
日志按天拆分实现方案
实现逻辑
- 读取日志首行,解析
Start-Date字段得到起始日期,首日文件命名格式为日两位+月两位+年两位.txt,对应示例中的260522.txt - 逐行遍历日志内容,自动跳过首行启动时间记录,过滤每行首尾多余空白字符
- 识别每行前缀时间戳,若时间以
00:开头则判定进入次日,关闭当前写入的文件,次日文件命名格式为日两位+月份英文缩写+四位年.txt,对应示例中的27May2022.txt - 将对应日志条目写入当前日期所属的文件
可直接运行的Python脚本
from datetime import datetime, timedelta import re # 修改为实际日志文件路径 LOG_PATH = "app.log" # 解析首行起始日期 with open(LOG_PATH, 'r', encoding='utf-8') as f: first_line = f.readline().strip() date_match = re.search(r'Start-Date:\s+(\w{3}\s+\w{3}\s+\d{1,2}\s+\d{4})', first_line) if not date_match: raise ValueError("日志首行未找到合法起始日期") current_date = datetime.strptime(date_match.group(1), "%a %b %d %Y") current_filename = current_date.strftime("%d%m%y") + ".txt" current_file = open(current_filename, 'w', encoding='utf-8') # 逐行处理日志条目 for line in f: line = line.strip() if not line: continue time_part = line.split()[0] # 判定是否跨天,避免重复切换文件 if time_part.startswith("00:") and current_filename == current_date.strftime("%d%m%y") + ".txt": current_file.close() current_date += timedelta(days=1) current_filename = current_date.strftime("%d%b%Y") + ".txt" current_file = open(current_filename, 'w', encoding='utf-8') # 写入当前行,若需要去重可在此处增加重复行判断逻辑 current_file.write(line + "\n") current_file.close()
适配说明
- 脚本默认读取同目录下名为
app.log的日志文件,可修改LOG_PATH变量指定实际日志路径 - 日期解析默认适配示例中的MDT时区格式,若日志输出时区变化可调整
strptime的匹配规则 - 如果需要过滤重复条目、异常时间点记录,可在写入逻辑前增加对应判断即可
内容的提问来源于stack exchange,提问作者Apoorva Singh
相关产品推荐
相关产品推荐

