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

如何使用Python datetime库提取日志日期并写入txt文件

问题描述

需要提取日志文件中的日期信息,保存到独立文本文件中,当前编写的代码无法实现预期效果,现有代码如下:

from datetime import datetime

with open("logs2merge/archive.log", "r") as file:
    lines = file.readlines()
    dates = [lines]
    string = ''.join([str(item) for item in dates])
    for line in lines[:1980]:
        try:
            print(datetime.strptime(line[:23], "%Y-%m-%d %H:%M:%S,%f"))
        except ValueError:
            pass

with open("logs2merge/dates.txt", "w") as newfile:
    lines = newfile.writelines(string)

预期效果:将从日志中成功提取的日期写入logs2merge/dates.txt文件。

原代码问题
  • 没有收集解析成功的日期:解析到符合格式的时间后仅做了打印输出,没有存入待写入的变量
  • 写入内容错误:最终写入文件的string是整个原日志文件的全量内容,和提取日期的目标无关
  • 冗余逻辑:dates = [lines]属于无效写法,将整个行列表嵌套了一层新列表,没有实际作用
  • 处理范围限制:仅遍历了前1980行日志,无法提取全量日志中的日期
可直接运行的修正代码
from datetime import datetime

collected_dates = []

# 逐行读取日志解析日期
with open("logs2merge/archive.log", "r", encoding="utf-8") as f:
    for line in f:
        try:
            # 匹配行首固定长度的时间格式
            date_obj = datetime.strptime(line[:23], "%Y-%m-%d %H:%M:%S,%f")
            collected_dates.append(f"{date_obj.strftime('%Y-%m-%d %H:%M:%S,%f')}\n")
        except ValueError:
            # 非时间格式的行直接跳过
            pass

# 批量写入提取到的日期
with open("logs2merge/dates.txt", "w", encoding="utf-8") as out_f:
    out_f.writelines(collected_dates)
优化点说明
  • 逐行流式读取文件,大体积日志处理时不会占用过多内存
  • 解析成功的日期直接格式化后存入列表,写入时无需额外拼接处理
  • 增加编码参数,避免Windows/macOS跨系统打开文件时出现乱码
  • 去掉了前1980行的遍历限制,默认处理全量日志,如果需要限制行数可以自行加回切片

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:24:59