respuesta más reciente: si se está moviendo a una recta strptime()
no ha mejorado el tiempo de ejecución, entonces mi sospecha es que en realidad no hay problema aquí: simplemente han escrito un programa, uno de cuyos principales objetivos en la vida es para llamar al strptime()
muchas veces, y lo ha escrito lo suficientemente bien - con tan poco otras cosas que lo hace - que las llamadas strptime()
se les permite dominar de manera bastante adecuada el tiempo de ejecución. Creo que podría contar esto como un éxito en lugar de como un fracaso, a menos que encuentre que (a) cierta configuración de Unicode o LANG hace que strptime()
trabaje más, o (b) la llame más a menudo de lo necesario. Intente, por supuesto, llamarlo solo una vez para cada fecha para analizar. :-)
Respuesta de seguimiento después de ver la cadena de fecha de ejemplo: ¡Espere! ¡Espere! ¿Por qué estás analizar la línea en lugar de usar una cadena de formato, como:
"%d/%b/%Y:%H:%M:%S"
original fuera de la manga respuestas: Si el mes fuera un número entero que podría hacer algo como esto:
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'])
)
y evite crear una cadena grande solo para que strptime()
vuelva a separarla. Me pregunto si hay una forma de acceder directamente a la lógica del nombre del mes para hacer esa conversión textual.
Lo hice en una función y lo probé en mi código contra el mismo millón de líneas de registro varias veces yendo y viniendo entre esto y strptime(). ¡Tiempo total de Parse consistentemente cuando bajó de 80 a 50 segundos! –
Buena solución. ¿Podría sugerir también qué puedo hacer si tengo un formato de 12 horas por horas? ¿Hay alguna otra forma de manejar eso además de poner condiciones y hacerlo manualmente? – Naman
@Naman podría agregar 'am_pm_offset = {'AM': 0, 'PM': 12}' y agregar eso a las horas. –