Python读取包含微秒时间戳的日志文件
我在一个日志文件里有一个时间戳,格式是这样的:
2010-01-01 18:48:14.631829
我试过一些常用的方法,比如用strptime来处理,但无论我怎么做,它总是告诉我这个时间戳和我指定的格式不匹配。("%Y-%m-%d %H:%M:%S" 或 "%Y-%m-%d %H:%M:%S.%f")
我甚至尝试过用“.”来分割这个值,这样我就可以只比较没有微秒部分的值,但它还是告诉我不匹配:“%Y-%m-%d %H:%M:%S”
唉,我只想做一个简单的时间差计算,哈哈。为什么Python的时间处理这么复杂呢?有time、datetime,还有其他各种导入的模块。
3 个回答
0
以下内容对我有效(Python 2.6版本):
>>> import datetime
>>> string1 = '2010-01-01 18:48:14.631829'
>>> string2 = '2010-01-09 13:04:39.540268'
>>> time1 = datetime.datetime.strptime(string1, '%Y-%m-%d %H:%M:%S.%f')
>>> time2 = datetime.datetime.strptime(string2, '%Y-%m-%d %H:%M:%S.%f')
>>> time2 - time1
datetime.timedelta(7, 65784, 908439)
也就是说,这两个日期之间相差7天、65784秒和908439微秒。想了解timedelta
对象的更多信息,可以查看datetime文档。
编辑:如果你不能使用%f
这个指令,可以试试以下方法:
>>> time1 = datetime.datetime.strptime(string1.split('.')[0], '%Y-%m-%d %H:%M:%S')
>>> time2 = datetime.datetime.strptime(string2.split('.')[0], '%Y-%m-%d %H:%M:%S')
>>> time2 - time1
datetime.timedelta(7, 65785)
0
当然,把字符串分开是可以的:
>>> print s
2010-01-01 18:48:14.631829
>>> time.strptime(s.split('.')[0], "%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=18, tm_min=48, tm_sec=14, tm_wday=4, tm_yday=1, tm_isdst=-1)
>>>
4
你可以这样使用 strptime
(仅适用于 Python 2.6 及以上版本):
>>> import datetime
>>> s = "2010-01-01 18:48:14.631829"
>>> datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S.%f")
datetime.datetime(2010, 1, 1, 18, 48, 14, 631829)
文档链接:http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior
...
%f
微秒以十进制数字表示,范围是 [0,999999],左边用零填充...
如果你使用的是 2.5 版本及以下,并且不在乎微秒的话,你可以直接把它去掉:
>>> import re
>>> datetime.datetime.strptime(re.sub('\..*', '', s), "%Y-%m-%d %H:%M:%S")
datetime.datetime(2010, 1, 1, 18, 48, 14)