Ho un file .txt 30MB, con una riga di dati (30 milioni Numero Digit)
Purtroppo, ogni metodo che ho provato (mmap.read()
, readline()
, allocare 1 GB di RAM, per i loop) richiede più di 45 minuti per leggere completamente il file. Ogni metodo che ho trovato su internet sembra funzionare sul fatto che ogni riga è piccola, quindi il consumo di memoria è grande solo quanto la riga più grande del file. Ecco il codice che ho usato.lettura molto grande Liner Text File
start = time.clock()
z = open('Number.txt','r+')
m = mmap.mmap(z.fileno(), 0)
global a
a = int(m.read())
z.close()
end = time.clock()
secs = (end - start)
print("Number read in","%s" % (secs),"seconds.", file=f)
print("Number read in","%s" % (secs),"seconds.")
f.flush()
del end,start,secs,z,m
Diverso dal suddividere il numero da una linea a varie linee; che preferirei non fare, esiste un metodo più pulito che non richiederà la parte migliore di un'ora?
A proposito, non devo necessariamente usare file di testo.
ho: Windows 8.1 a 64 bit, 16 GB di RAM, Python 3.5.1
Leggere un file di 30 MB è veloce. È il 'int (filecontent)' che è lento. –
Sei consapevole che la conversione genererà un'approssimazione su di essa, più o meno a seconda del tipo che scegli? Non manterrai tutte le cifre di Gazillion di esso. – Roberto
... Voglio dire, ovviamente potresti essere in grado di lavorare su quel numero, ma i tipi standard non contengono 30 milioni di cifre significative in un unico numero. Saranno approssimativi. Dovrai cercare o implementare un modo per farlo. – Roberto