在python中转换strptime中的数据时出现问题

时间:2018-05-09 08:56:05

标签: python list datetime strptime

我试图计算从一个点到另一个点的平均时间距离。这是导入数据的功能。

在处理时间时,有关开始时间类型列表的错误

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'

2 个答案:

答案 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