/ / value error avec datetime.strptime - python

valeur error avec datetime.strptime - python

J'essaie de lire les dates d'un fichier txt et de le convertir au format datetime

Code:

from datetime import datetime, date

with open("birth.txt") as f:
content = f.readlines()
content = [x.strip() for x in content]
for i in content:
a = i.split(":")
date_b = []
date_b.append(a[-1])
print date_b
for j in date_b:
date_object = datetime.strptime(str(j), "%m-%d-%Y")
print date_object

Fichier texte:

a:11-23-2001
b:02-14-2002

ValueError: les données temporelles "11-23-2001" ne correspondent pas au format "% m-% d-% Y"

Est-ce que quelqu'un peut m'aider à résoudre cette erreur?

Réponses:

2 pour la réponse № 1

Il y a plusieurs parties problématiques avec votrecode. L’erreur est due au fait qu’il y ait un espace avant la chaîne de date, bien que je ne sois pas sûr de l’origine de ce fichier. Par ailleurs, pourquoi avez-vous même la deuxième boucle? Et vous écrasez la date_b dans chaque boucle de ligne ... Essayez ceci:

from datetime import datetime

with open("birth.txt") as f:
dates = []  # store this outside of your loop
for line in f:  # read line by line
v, d = line.strip().split(":")
d = datetime.strptime(d.strip(), "%m-%d-%Y")  # just in case of additional whitespace
dates.append((v, d))
print(dates)
# [("a", datetime.datetime(2001, 11, 23, 0, 0)), ("b", datetime.datetime(2002, 2, 14, 0, 0))]

Vous pouvez aussi transformer ce dernier en dictionnaire (dict(dates)) ou construire un dictionnaire immédiatement.


0 pour la réponse № 2

Outre les problèmes signalés par @zwer, vousl’inefficacité majeure de lire le fichier entier en mémoire avant de le traiter. Cela rend en réalité votre travail plus difficile que nécessaire, car les fichiers en Python sont éditables sur leurs lignes. Vous pouvez faire quelque chose comme:

from datetime import datetime, date

with open("birth.txt") as f:
for line in f:
key, datestr = line.strip().split(":")
dateobj = datetime.strptime(datestr, "%m-%d-%Y")
print(dateobj)

En utilisant le fait que le fichier est un itérateur, vous pouvez écrire une liste de compréhension d'une ligne pour générer une liste complète des dates:

with open("birth.txt") as f:
dates = [datetime.strptime(line.strip().split(":")[1], "%m-%d-%Y") for line in f]

Si la clé a une signification, vous pouvez créer un dictionnaire avec une compréhension du dictionnaire en utilisant une syntaxe similaire:

with open("birth.txt") as f:
dates = {key: datetime.strptime(datestr, "%m-%d-%Y") for key, datestr in (line.strip().split(":") for line in f)}