réponse la plus récente: se déplacer à un strptime()
droit n'a pas amélioré le temps de la course, alors je soupçonne qu'il n'y a en réalité aucun problème ici: vous avez simplement écrit un programme, dont l'un des objectifs principaux dans la vie est appeler strptime()
très souvent, et vous l'avez écrit assez bien - avec si peu d'autres choses que cela - que les appels strptime()
sont tout à fait correctement autorisés à dominer l'exécution. Je pense que vous pourriez considérer cela comme un succès plutôt que comme un échec, à moins que vous ne trouviez que (a) un paramètre Unicode ou LANG fait du travail supplémentaire, ou (b) vous l'appelez plus souvent que nécessaire. Essayez, bien sûr, de ne l'appeler qu'une fois pour chaque date à analyser. :-)
Réponse de suivi après avoir vu la chaîne de date d'exemple: Attendez! Attendez! Pourquoi vous analysez la ligne au lieu d'utiliser une chaîne de mise en forme comme:
"%d/%b/%Y:%H:%M:%S"
originale hors la manchette réponse: Si le mois était un entier que vous pourriez faire quelque chose comme ceci:
new_entry['time'] = datetime.datetime(
int(parsed_line['year']),
int(parsed_line['month']),
int(parsed_line['day']),
int(parsed_line['hour']),
int(parsed_line['minute']),
int(parsed_line['second'])
)
et d'éviter de créer une grosse chaîne juste pour que le strptime()
se sépare à nouveau. Je me demande s'il existe un moyen d'accéder directement à la logique du nom du mois pour faire cette conversion textuelle?
Fait cela dans une fonction et testé dans mon code contre le même 1 million de lignes de journal plusieurs fois aller-retour entre cela et strptime(). Le temps d'analyse total est constant quand il passe de 80 à 50 secondes! –
Bonne solution. Pourriez-vous également suggérer ce que je peux faire si j'ai le format de 12 heures pendant des heures. Y at-il un autre moyen de gérer cela en plus de mettre des conditions et de le faire manuellement? – Naman
@Naman vous pouvez ajouter 'am_pm_offset = {'AM': 0, 'PM': 12}' et ajouter cela aux heures. –