如何使用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
相关产品推荐
相关产品推荐

