Ho uno script molto semplice in questo momento che conta le righe di un file di testo utilizzando enumerate()
:(Python) Contare le linee in un enorme (10 GB>) file più velocemente possibile
i = 0
f = open("C:/Users/guest/Desktop/file.log", "r")
for i, line in enumerate(f):
pass
print i + 1
f.close()
Questo richiede circa 3 e un mezzo minuto per passare attraverso un file di registro da 15 GB con ~ 30 milioni di righe. Sarebbe bello se potessi ottenere questo sotto due minuti o meno, perché questi sono registri giornalieri e vogliamo fare un'analisi mensile, quindi il codice dovrà elaborare 30 log di ~ 15 GB - più di un'ora e mezza forse e vorremmo ridurre al minimo il tempo di caricamento della memoria & sul server.
vorrei anche accontentarsi di un metodo di buona approssimazione/stima, ma ha bisogno di essere di circa 4 in ordine a fig accurata ...
Grazie!
In generale, sarebbe probabilmente più veloce trattare il file come dati binari, leggerlo in blocchi di dimensioni ragionevoli (ad esempio 4KB alla volta) e contare i caratteri \ n in ogni blocco mentre si va. – aroth
Questo non è un risultato migliore della tua soluzione ingenua, ma fyi il modo pietonico di scrivere quello che hai qui sarebbe semplicemente 'con open (fname) come f: print sum (1 per line in f)' – wim
aroth: Grazie per il suggerimento, dovrei esaminarlo. wim: fantastico, grazie, è molto più breve ... – Adrienne