più recente risposta: se trasferirsi in una scala strptime()
non ha migliorato il tempo di esecuzione, allora il mio sospetto è che non v'è in realtà un problema qui: avete semplicemente scritto un programma, uno dei cui obiettivi principali nella vita è per chiamare lo strptime()
molte volte, e lo avete scritto abbastanza bene - con così poche altre cose che fa - che le chiamate strptime()
siano abbastanza correttamente autorizzate a dominare il runtime. Penso che potresti considerarlo un successo piuttosto che un fallimento, a meno che non trovi che (a) qualche impostazione Unicode o LANG sta facendo un lavoro extra strptime()
o (b) lo chiami più spesso del necessario. Prova, ovviamente, a chiamarlo solo una volta per ogni data da analizzare. :-)
Risposta di follow-up dopo aver visto la stringa di data di esempio: Attendere! Resisti! Perché stai analisi della riga invece di utilizzare una stringa di formattazione come:
"%d/%b/%Y:%H:%M:%S"
originale off-the-bracciale-risposta: Se il mese fosse un numero intero si potrebbe fare qualcosa di simile:
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'])
)
ed evitare di creare una stringa grande solo per rendere strptime()
diviso nuovamente. Mi chiedo se c'è un modo per accedere direttamente alla logica del nome del mese per fare quella conversione testuale?
fonte
2010-11-01 16:33:45
Inserito questo in una funzione e testato nel mio codice contro lo stesso 1 milione di righe di registro più volte andare avanti e indietro tra questo e strptime(). Tempo totale di analisi costante quando scende da 80 a 50 secondi! –
Buona soluzione. Potrebbe anche suggerire cosa posso fare se ho un formato di 12 ore per ore. C'è un altro modo per gestirlo oltre a mettere le condizioni e farlo manualmente? – Naman
@Naman potresti aggiungere 'am_pm_offset = {'AM': 0, 'PM': 12}' e aggiungerlo alle ore. –