我试图计算从一个点到另一个点的平均时间距离。这是导入数据的功能。
在处理时间时,有关开始时间类型列表的错误
stime_record :
[['01/01/2016 00h15m'], ['01/01/2016 00h48m'], ['01/01/2016 01h08m'], ['01/01/2016 03h06m'], ['01/01/2016 05h22m'], ['01/01/2016 08h34m'], ['01/01/2016 09h59m']]
func :
for x in stime_record:
datetime.strptime(str(x), '%d/%m/%Y %Hh%Mm')
ValueError: time data "['01/01/2016 00h15m']" does not match format '%d/%m/%Y %Hh%Mm'
答案 0 :(得分:1)
只需尝试一下:
datetime.strptime(str(x[0]), '%d/%m/%Y %Hh%Mm')
这就是为什么你有一个列表列表,所以在每次迭代中x
将是一个列表而不是字符串,当你将它转换为str
时,它不会匹配。
答案 1 :(得分:0)
这里有一个列表列表,而不是字符串列表。处理问题的一种方法是在处理之前展平。使用itertools.chain
进行列表理解是一种有效的方法。
from datetime import datetime
from itertools import chain
lst = [['01/01/2016 00h15m'], ['01/01/2016 00h48m'], ['01/01/2016 01h08m'],
['01/01/2016 03h06m'], ['01/01/2016 05h22m'], ['01/01/2016 08h34m'],
['01/01/2016 09h59m']]
res = [datetime.strptime(x, '%d/%m/%Y %Hh%Mm') for x in chain.from_iterable(lst)]
print(res)
[datetime.datetime(2016, 1, 1, 0, 15), datetime.datetime(2016, 1, 1, 0, 48),
datetime.datetime(2016, 1, 1, 1, 8), datetime.datetime(2016, 1, 1, 3, 6),
datetime.datetime(2016, 1, 1, 5, 22), datetime.datetime(2016, 1, 1, 8, 34),
datetime.datetime(2016, 1, 1, 9, 59)]
如果您希望迭代结果而不形成新列表,请使用生成器表达式:
for dt in (datetime.strptime(x, '%d/%m/%Y %Hh%Mm') for x in chain.from_iterable(lst)):
# do something with dt