python - Python:无法解析数据以将其转换为日期时间对象
问题描述
我的任务是从许多日志文件中提取特定时间的数据,这些日志文件是以下形式的文本文件:
Aug 15 17:32:57 sandbox_pre_process_config:[sandbox] Sandbox pre process
Aug 15 17:32:57 sandbox_list_destroy:[sandbox] sandbox_list_destroy, sandbox list destroy done
Aug 15 17:32:57 sandbox_list_create:[sandbox] sandbox_list_create, sandbox list create done
Aug 15 17:32:57 entering ext_mac_pre_process_config, init_done 1
我能够提取日期,但无法将其转换为进一步操作所需的日期时间对象。
这是我到目前为止所尝试的:
import subprocess
from datetime import datetime
import re
month_abbr = {"jan": 1, "feb": 2, "mar": 3, "apr": 4, "may": 5, "jun": 6,
"jul": 7, "aug": 8, "sep": 9, "oct": 10, "nov": 11, "dec": 12}
def parse_date(lines):
mon, day, tim = lines.split(None, 3)
date_string = "{:02} {:02} ".format(month_abbr[mon.lower()], int(day)) + tim
try:
return datetime.strptime(date_string, "%m %d %H:%M:%S")
except ValueError as e:
return datetime.strptime(date_string, "%m %d %H:%M:%S.%f")
f = open("temp.txt")
for lines in f:
line = lines.strip()
date_obj = re.search('(.*?\d\d:\d\d:\d\d)', line)
if date_obj:
date = date_obj.group(1)
val = parse_date(date)
print val
这是我遇到的错误:
Aug 15 17:41:06
Aug 15 17:41:07
Aug 15 17:41:07
Traceback (most recent call last):
File "main.py", line 23, in <module>
val = parse_date(date)
File "main.py", line 9, in parse_date
mon, day, tim = lines.split(None, 3) # note the change
ValueError: too many values to unpack
我看不出有什么问题!请帮帮我!
PS - 只能使用标准 python 库!
解决方案
这种方法应该有效:
from datetime import datetime
with open("temp.txt") as f_input:
for line in f_input:
data = line.strip().split(' ', 3)
date_string = ' '.join(data[:3])
for date_format in ["%b %d %H:%M:%S", "%b %d %H:%M:%S.%f"]:
try:
dt = datetime.strptime(date_string, date_format)
print dt, data[-1].strip() # print date and log entry
except ValueError as e:
pass
它拆分前 3 个空格,为您提供日期和日志条目组件。然后它将日期部分重新连接在一起并应用两种可能的日期格式。如果正确解析日期,则显示该条目,否则跳过该行。
%b
用于匹配 3 个字母的月份。
推荐阅读
- kubernetes - Prometheus 服务端点的上下文期限已超出
- r - 多条线映射到相同的颜色ggplot2 R
- angular - 在等待 RxJS 可观察对象时在 Angular 中显示加载指示器
- mongodb - 如何过滤 $lookup 结果
- r - 同一网络不同时间段的特征向量值(R中的igraph)
- c++ - static_cast 到一个结构类型来访问它的所有成员变量
- c++ - `LoadLibraryExW` 从`NtMapViewOfSection` 触发异常`0xC0000023`
- microsoft-graph-api - 有没有办法轻松查看 Azure/Microsoft Graph webhook 的调度是否有问题?
- java - 将 Immutable 转换为可变列表 Java,还有其他选择吗?
- sql-server - SQL Server:返回表中包含多个字符串的行