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.
Mati
User
Beiträge: 68
Registriert: Dienstag 6. Juni 2006, 16:54

Gewaltiges file schnell durchlesen

Beitragvon Mati » Montag 31. Juli 2006, 10:14

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

Beitragvon BlackJack » Montag 31. Juli 2006, 10:36

Versuchs doch einfach.

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

Beitragvon Gromit » Montag 31. Juli 2006, 16:57

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()

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]