web-dev-qa-db-fra.com

ValueError: les données non converties restent: 02:05

J'ai quelques dates dans un fichier json, et je recherche celles qui correspondent à la date d'aujourd'hui:

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') 

J'ai eu une erreur comme celle-ci:

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

Avez-vous des suggestions ?

20
4m1nh4j1

La valeur de st à st = datetime.strptime(st, '%A %d %B') ligne quelque chose comme 01 01 2013 02:05 et strptime ne peuvent pas analyser ceci. En effet, vous obtenez une heure en plus de la date ... Vous devez ajouter %H:%M à votre rythme.

27
Maxime Lorant

La meilleure réponse consiste à utiliser le from dateutil import parser.

usage:

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())
6
Anjaneyulu Batta

Vous devez analyser tous de la chaîne d'entrée, vous ne pouvez pas simplement ignorer les parties.

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()

Ici, nous comparons la date à la date d'aujourd'hui en utilisant plus d'objets datetime au lieu d'essayer d'utiliser des chaînes.

L'alternative est de ne passer que partie du item['start'] chaîne (séparant juste le temps), mais il n'y a vraiment pas de point ici, pas quand vous pourriez tout analyser en une seule étape en premier.

6
Martijn Pieters

Eh bien, c'était très simple. Il me manquait le format de la date dans le fichier json, donc je devrais écrire:

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

car dans le fichier json la date était comme:

"start": "Friday 06 December 02:05",
1
4m1nh4j1