Подтвердить что ты не робот

ValueError: неконвертированные данные остаются: 02:05

У меня есть несколько дат в json файлах, и я ищу тех, кто соответствует сегодняшней дате:

import  os
import time
from datetime import datetime
from pytz import timezone

input_file  = file(FILE, "r")
j = json.loads(input_file.read().decode("utf-8-sig"))

os.environ['TZ'] = 'CET'

for item in j:
    lt = time.strftime('%A %d %B')
    st = item['start']
    st = datetime.strptime(st, '%A %d %B')

    if st == lt :
        item['start'] = datetime.strptime(st,'%H:%M') 

У меня была ошибка:

File "/home/--/--/--/app/route.py", line 35, in file.py

st = datetime.strptime(st, '%A %d %B')

File "/usr/lib/python2.7/_strptime.py", line 328, in _strptime

data_string[found.end():])

ValueError: unconverted data remains: 02:05

Есть ли у вас предложения?

4b9b3361

Ответ 1

Значение st в строке st = datetime.strptime(st, '%A %d %B') похоже на 01 01 2013 02:05, а strptime не может проанализировать это. В самом деле, вы получаете час в дополнение к дате... Вам нужно добавить %H:%M в свой strptime.

Ответ 2

Вам нужно разобрать всю входную строку, вы не можете просто игнорировать детали.

from datetime import date, datetime

for item in j:
    st = datetime.strptime(item['start'], '%A %d %B %H:%M')

    if st.date() == date.today():
        item['start'] = st.time()

Здесь мы сравниваем дату с сегодняшней датой, используя больше объектов datetime вместо того, чтобы пытаться использовать строки.

Альтернативой является передача только части строки item['start'] (расщепление только времени), но здесь действительно нет смысла, а не тогда, когда вы можете просто разобрать все на первом шаге.

Ответ 3

Ну это было очень просто. Мне не хватало формат даты в json файле, поэтому я должен написать:

st = datetime.strptime(st, '%A %d %B %H %M')

потому что в json файле дата была такой:

"start": "Friday 06 December 02:05",

Ответ 4

Лучший ответ - использовать from dateutil import parser.

использование:

from dateutil import parser
datetime_obj = parser.parse('2018-02-06T13:12:18.1278015Z')
print datetime_obj
# output: datetime.datetime(2018, 2, 6, 13, 12, 18, 127801, tzinfo=tzutc())