Seite 1 von 1

Gewaltiges file schnell durchlesen

Verfasst: Montag 31. Juli 2006, 10:14
von Mati
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

Verfasst: Montag 31. Juli 2006, 10:36
von BlackJack
Versuchs doch einfach.

Wobei Zeilenweises lesen eigentlich nicht allzu langsam sein sollte. Wie sieht denn Dein Quelltext dafür aus?

Verfasst: Montag 31. Juli 2006, 16:57
von Gromit
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()