Ho un numero di file di testo molto grandi che devo elaborare, il più grande dei quali è di circa 60 GB.Processo molto grande (> 20 GB) file di testo riga per riga
Ogni riga ha 54 caratteri in sette campi e desidero rimuovere gli ultimi tre caratteri da ciascuno dei primi tre campi, il che dovrebbe ridurre le dimensioni del file di circa il 20%.
Sono nuovo di zecca per Python e ho un codice che farà quello che voglio fare a circa 3,4 GB all'ora, ma per essere un esercizio utile ho davvero bisogno di ottenere almeno 10 GB/ora - è lì un modo per velocizzare questo? Questo codice non si avvicina a sfidare il mio processore, quindi sto facendo un'ipotesi non istruita che è limitata dalla velocità di lettura e scrittura sul disco rigido interno?
ProcessLargeTextFile():
r = open("filepath", "r")
w = open("filepath", "w")
l = r.readline()
while l:
x = l.split(' ')[0]
y = l.split(' ')[1]
z = l.split(' ')[2]
w.write(l.replace(x,x[:-3]).replace(y,y[:-3]).replace(z,z[:-3]))
l = r.readline()
r.close()
w.close()
Qualsiasi aiuto sarebbe molto apprezzato. Sto usando la GUI Python IDLE su Windows 7 e ho 16 GB di memoria - forse un sistema operativo diverso sarebbe più efficiente?
Modifica: Ecco un estratto del file da elaborare.
70700.642014 31207.277115 -0.054123 -1585 255 255 255
70512.301468 31227.990799 -0.255600 -1655 155 158 158
70515.727097 31223.828659 -0.066727 -1734 191 187 180
70566.756699 31217.065598 -0.205673 -1727 254 255 255
70566.695938 31218.030807 -0.047928 -1689 249 251 249
70536.117874 31227.837662 -0.033096 -1548 251 252 252
70536.773270 31212.970322 -0.115891 -1434 155 158 163
70533.530777 31215.270828 -0.154770 -1550 148 152 156
70533.555923 31215.341599 -0.138809 -1480 150 154 158
Se stai scrivendo in Python 2.7, puoi provare a girare su [PyPy] (http://pypy.org/). Il compilatore just-in-time potrebbe darti delle prestazioni in accelerazione sul campo, anche se non sono sicuro di quanto sarebbe di aiuto se il filesystem fosse il collo di bottiglia. – pcurry
puoi darci un piccolo snippet del file? – root