Gewaltiges file schnell durchlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mati
User
Beiträge: 68
Registriert: Dienstag 6. Juni 2006, 16:54

Hallo,

wenn ich z.B ein 50 MB txt file durchlaufe zeile fuer zeile dauert das unheimlich lang. Gibt es eine Methode mit der ich schneller durchlaufen kann udn nach gewuenschten informationen lesen kann?
Vielleicht wenn ich mir das file komplett in den speicher als string hole und dann darauf mit regular expressions operiere ? ist das schneller?

danke fuer hilfe
BlackJack

Versuchs doch einfach.

Wobei Zeilenweises lesen eigentlich nicht allzu langsam sein sollte. Wie sieht denn Dein Quelltext dafür aus?
Gromit
User
Beiträge: 51
Registriert: Montag 8. Mai 2006, 19:07

Am besten mapped man dei Datei in den Hauptspeicher, dann kann man mit find im mapping suchen.

Kurzer Ausschnitt zur Veranschaulichung (Die Enrückung ist vermutlich daneben):

Code: Alles auswählen

reportFile = open( filename )
length = os.fstat( reportFile.fileno() ).st_size
if length == 0:
    # Don't map zero length files, windows will barf
    continue
try:
    mapping = mmap.mmap( reportFile.fileno(), length,
                mmap.MAP_PRIVATE, mmap.PROT_READ )
except AttributeError:
    mapping = mmap.mmap(
                reportFile.fileno(),
                0, None,
                mmap.ACCESS_READ )
current = 0
while current < length:
    startHeader = mapping.find( "Start:", current )
    startStart = startHeader + len( "Start:" )
    startString = mapping[ startStart : mapping.find( ".", startStart ).strip()
    stopHeader = mapping.find( "Stopp:", current )
    startStop = stopHeader + len( "Stopp:" )
    stopString = mapping[ startStop : mapping.find( ".", startStop )].strip()
Antworten