2013-03-26 10 views
7

Angesichts einer großen Datei (Hunderte von MB) Wie würde ich Python verwenden, um schnell den Inhalt zwischen einem bestimmten Start- und Ende-Index in der Datei zu lesen?Wie man einen bestimmten Teil einer großen Datei in Python liest

Im Wesentlichen, ich suche für eine effizientere Art und Weise zu tun:

open(filename).read()[start_index:end_index] 

Antwort

14

Sie kann seek in die Datei der Datei und dann von dort aus einem bestimmten Betrag lesen. Mit Seek können Sie zu einem bestimmten Offset innerhalb einer Datei gelangen, und dann können Sie Ihren Lesevorgang auf die Anzahl der Bytes in diesem Bereich beschränken.

with open(filename) as fin: 
    fin.seek(start_index) 
    data = fin.read(end_index - start_index) 

Das wird nur die Daten lesen, die Sie suchen.

+2

Beachten Sie, dass dies nur OP-Code für Dateien mit Single-Byte-Codierung (wie ASCII) oder Binärdateien entspricht, da die 'start_index' und' end_index' des OP die Zeichenposition sind, während 'seek()' und 'read () 'arbeitet mit Byte-Position. Wenn Sie eine Datei mit Codierung mit variabler Breite haben, müssen Sie möglicherweise die Datei dekodieren, um korrekt indizieren zu können. –

+1

Das ist ein wirklich guter Punkt. Ich war sehr im ASCII-Modus :-) –

+1

Ein zusätzlicher Punkt: Wenn Sie versuchen, mehrere zusammenhängende Segmente einer Datei zu lesen, setzt fin.read (n) den Lesezeiger automatisch auf das nächste zu lesende Byte. – MrMas

Verwandte Themen