我的情况是我有一个带有时间戳的项目列表,但实际的时间都被挤压在一起。像这样:
time = "165420" # 16:54:20 (or, 4:54 PM and 20 seconds.)
我想要一个脚本遍历这些行,并能够将时间戳转换为日期时间。我有年,月,日已经没问题了。但是对于时间问题,我迫切希望找到一个优雅而简单的解决方案。我决定首先暴力破解它以继续我的代码,最后得到:
import datetime
dt_timestamp = extract_dt("2012-11-09-165420") # example
def extract_dt(timestamp):
ds = timestamp.split('-') #split into groups (0,1,2 are the date, 3 is the time.
d = [int(i) for i in ds[:3]] + [int(ds[3][0:2]), int(ds[3][2:4]), int(ds[3][4:6])]
return datetime.datetime(*d)
在尝试解决我的情况时,我已经看到了很多关于这个问题的变化,有许多答案。
我找到了this solution:
def nsplit(s, n):
return [s[k:k+n] for k in xrange(0, len(s), n)]
对我来说很好用:
>>> s = "165420"
>>> n = 2
>>> [s[k:k+n] for k in xrange(0, len(s), n)]
['16', '54', '20']
但是我很确定必须有一种更好,更优雅的方式将字符串拆分成相同大小的组,正如我提供的link中所提到的那样(但由于链接海报有拼写错误而修复) :
TheFunction(“Hello World”,3)
返回:
['Hel','lo','Wor','ld']
如果可能的话,我更希望它不是一个功能,我希望有一种方法可以在线进行。它应该尽可能高效。我总是可以从我找到的函数中提取列表理解,但我觉得它不是很有效,而且看起来不对。
答案可能很简单,我只是不知道。再次感谢。
答案 0 :(得分:2)
我不知道比你在问题中提到的更优雅的分块字符串解决方案,但datetime.datetime.strptime()
解决了你的实际问题:
>>> from datetime import datetime
>>> datetime.strptime("2012-11-09-165420", "%Y-%m-%d-%H%M%S")
datetime.datetime(2012, 11, 9, 16, 54, 20)
答案 1 :(得分:2)
您可以使用textwrap.wrap()
:
>>> import textwrap
>>> s = "165420"
>>> n = 2
>>> textwrap.wrap(s, n)
['16', '54', '20']