Проблемы при преобразовании данных в strptime в python - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь вычислить среднее время расстояния от точки до другой. Это функции для импорта данных.

При обработке времени возникает ошибка в списке типов времени запуска

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 голосов
/ 09 мая 2018

Просто попробуйте это:

datetime.strptime(str(x[0]), '%d/%m/%Y %Hh%Mm')

Вот почему у вас есть список списков, поэтому на каждой итерации x будет списком, а не строкой, и когда вы преобразуете его в str, он не будет совпадать.

0 голосов
/ 09 мая 2018

У вас есть список списков, а не список строк. Один из способов решения этой проблемы - выравнивание перед обработкой. Понимание списка с помощью 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
...