ich eine 30MB .txt-Datei haben, mit eine Datenzeile (30 Millionen stellige Zahl)
Leider jede Methode, die ich versucht habe (mmap.read()
, readline()
, Zuweisung von 1 GB RAM, für Schleifen) dauert mehr als 45 Minuten, um die Datei vollständig zu lesen. Jede Methode, die ich im Internet gefunden habe, scheint an der Tatsache zu arbeiten, dass jede Zeile klein ist, deshalb ist der Speicherverbrauch nur so groß wie die größte Zeile in der Datei. Hier ist der Code, den ich benutzt habe.Lesen Very Large One Liner Textdatei
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
Andere als die Aufteilung der Nummer von einer Zeile auf verschiedene Zeilen; was ich lieber nicht machen würde, gibt es eine sauberere Methode, die nicht den besseren Teil einer Stunde benötigt?
Übrigens muss ich nicht unbedingt Textdateien verwenden.
Ich habe: Windows 8.1 64-Bit, 16 GB RAM, Python 3.5.1
Das Lesen einer 30-MB-Datei ist schnell. Es ist der 'int (Dateiinhalt)', der langsam ist. –
Ist Ihnen bewusst, dass die Konvertierung mehr oder weniger Approximation ergibt, je nachdem, welchen Typ Sie wählen? Du wirst nicht all die Milliarden Ziffern davon behalten. – Roberto
... Ich meine, natürlich können Sie vielleicht an dieser Nummer arbeiten, aber die Standardtypen werden nicht 30 Millionen signifikante Ziffern alle in einer Nummer enthalten. Sie werden sich annähern. Sie müssen entweder nach einem Weg suchen oder es implementieren. – Roberto