Python使用aiofiles时处理日志排序遭遇DateTime格式解析错误
DateTime格式解析问题排查与解决
日志内容
2023-02-16 21:38:59,873 : Device was cradled 2023-02-16 21:38:59,873 : Device connected to network, IP
原错误代码
from datetime import datetime as dt sorted(files, key=lambda file: dt.strptime(file.split()[0], "%Y-%m-%d %H:%M:%S"))
错误信息
ValueError: time data '2023-02-16' does not match format '%Y-%m-%d %H:%M:%S'
问题原因
- 时间截取不完整:
file.split()[0]只提取了日志行的日期部分2023-02-16,但格式字符串%Y-%m-%d %H:%M:%S要求传入包含日期+时分秒的完整时间字符串,两者不匹配。 - 未处理毫秒格式:原日志时间戳包含逗号分隔的毫秒(如
21:38:59,873),原格式字符串未对应处理该部分。
解决方法
修正时间戳的截取方式和格式字符串,匹配日志的实际时间格式:
from datetime import datetime as dt # 假设files是存储日志行的列表 sorted_files = sorted(files, key=lambda line: dt.strptime(line.split(' : ')[0], "%Y-%m-%d %H:%M:%S,%f"))
关键调整点:
- 用
line.split(' : ')[0]截取完整的时间戳部分(如2023-02-16 21:38:59,873),而非仅日期。 - 格式字符串改为
%Y-%m-%d %H:%M:%S,%f,其中%f对应处理逗号后的毫秒数值。
内容的提问来源于stack exchange,提问作者Harry Wilson
相关产品推荐
相关产品推荐

