2

我正在尝试从具有毫秒时间戳的日志文件中读取,然后将其插入基于“st_time”作为键的字典中。

st_time = datetime.strptime(t_str[0],"%d/%b/%Y %H:%M:%S.%f")
final_dict[st_time] = line
for key in sorted(final_dict.iterkeys()):
    print "%s : %s" %(key,final_dict[key])

但我在下面得到这个错误

for key in sorted(final.iterkeys()):


TypeError: can't compare datetime.datetime to tuple

示例:来自日志文件的条目

Jul  1 03:27:12 syslog: [m_java]**[ 1/Jul/2013 03:27:12.818]**[j:[SessionThread <]^Iat com/avc/abc/magr/service/find.something(abc/1235/locator/abc;Ljava/lang/String;)Labc/abc/abcd/abcd;(bytecode:7)

t_str[0] --> ['29/Jun/2013 01:16:06.149']

st_time --> 2013-06-29 01:16:06.149000

谢谢你的帮助!

4

2 回答 2

1
st_time = datetime.strptime(t_str[0],"%d/%b/%Y %H:%M:%S.%f")
key = float(time.mktime(st_time.timetuple()) + st_time.microsecond / 1000000.0)
final_dict[key] = line
for key in sorted(final_dict.iterkeys()):
    print "%s : %s" %(key,final_dict[key])

您的错误的原因是 strptime 返回一个 struct_time。将其转换为 UNIX 时间戳(将是一个浮点数)应该可以让您更轻松地进行排序。

于 2013-07-05T17:37:06.960 回答
-1

如果您使用字典并希望以任何方式对其进行排序,那么您使用的是错误的数据类型。

还有许多其他子类型的字典确实支持排序,但我建议改用二元素元组。

sorted_times = sorted([(k, v) for k, v in final_dict.items()])

它将自动对每个元组的第一个条目进行排序,这应该是日期时间。

于 2013-07-05T17:37:52.090 回答