JSON日志文件按timestamp字段升序排序失败,如何排查错误?
错误原因
- 字典取值语法错误:你写的
x['timestamp', '%Y-%m-%d %H:%M:%S']是错误写法,相当于向字典传入了一个('timestamp', '%Y-%m-%d %H:%M:%S')的元组作为键,字典中不存在这个键,必然取值失败。时间格式参数是传给时间解析函数的,不是放在字典的取值括号内。 - 时间函数使用错误:第一种写法里你用了
time.strftime,这个函数的作用是将时间对象格式化为字符串,你要把字符串格式的时间转成可比较的时间对象,应该用time.strptime或者datetime.strptime,函数用反了。 - 时间格式不匹配:第二种写法里
strptime的格式参数只写了%Y-%m-%d,但你的时间字符串带有时分秒,格式完全不匹配,无法正确解析时间。 - 不必要的重复排序:第一种写法中每次append一条日志就调用一次sort,完全没有必要,等所有日志都加载到列表后排序一次即可,性能更高。
正确实现代码
import json from datetime import datetime merged_list = [] # 加载第一个日志文件 with open("第一个日志文件路径.jsonl", "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line: continue merged_list.append(json.loads(line)) # 加载第二个日志文件 with open("第二个日志文件路径.jsonl", "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line: continue merged_list.append(json.loads(line)) # 按timestamp升序排序 sorted_list = sorted(merged_list, key=lambda x: datetime.strptime(x['timestamp'], '%Y-%m-%d %H:%M:%S')) # 如需原地排序可替换为下面的代码 # merged_list.sort(key=lambda x: datetime.strptime(x['timestamp'], '%Y-%m-%d %H:%M:%S'))
内容的提问来源于stack exchange,提问作者jiezzzzzzzzz
相关产品推荐
相关产品推荐

