Lesen Sie die Datei in chunks - RAM-Nutzung, Lesen von Zeichenfolgen aus Binärdateien

ich würde gerne verstehen, den Unterschied in der RAM-Nutzung von diese Methoden, die beim Lesen einer großen Datei in python.

Version 1, hier auf stackoverflow:

def read_in_chunks(file_object, chunk_size=1024):
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data


f = open(file, 'rb')
for piece in read_in_chunks(f):
    process_data(piece)          
f.close()

Version 2, die ich verwendet, bevor ich fand den obigen code:

f = open(file, 'rb')
while True:
    piece = f.read(1024)      
    process_data(piece)        
f.close()

Die Datei gelesen wird, die teilweise in beiden Versionen. Und das aktuelle Stück verarbeitet werden konnten. Im zweiten Beispiel piece wird immer neue Inhalte auf jedem Zyklus, so dass ich dachte, dies würde die Arbeit machen, um nicht laden Sie die komplette Datei in den Speicher..?

Aber ich weiß nicht wirklich verstehen, was yield tut, und ich bin mir ziemlich sicher, ich habe etwas falsch hier. Könnte jemand erklären, dass mir?


Es ist etwas anderes, das verwirrt mich, neben der Methode verwendet:

Den Inhalt des Stück, das ich lese, ist definiert durch die chunk-Größe, 1 KB, in den obigen Beispielen. Aber... was ist, wenn ich brauchen, um für die strings in der Datei? So etwas wie "ThisIsTheStringILikeToFind" ?

Je nachdem, wo in der Datei die Zeichenfolge Auftritt, könnte es sein, dass die ein Stück enthält, das Teil "ThisIsTheStr" - und das nächste Stück enthalten würde "ingILikeToFind". Unter Verwendung einer solchen Methode ist es nicht möglich, zu erkennen, die gesamte Zeichenfolge in jedem Stück.

Gibt es eine Möglichkeit zum Lesen einer Datei in Stücke - aber irgendwie interessieren solche Saiten?

Jede Hilfe oder Idee ist willkommen,

grüßt!

  • Sie schreiben, könnte das erste fragment als for chunk in iter(partial(f.read, chunk_size), b""): process_data(chunk) (übernehmen Binär-Modus). Die Antwort auf die Letzte Frage ist ja: prüfen Sie einfach, ob das Stück endet mit beliebigen Zeichenfolge Präfixe und der nächste Abschnitt beginnt mit dem entsprechenden Zusatz.
  • Danke für die Erwähnung iter - wusste nicht, dass! Über die zweite Frage: Du meinst, ich könnte prüfen, ob das Stück endet mit T oder Th oder Thi oder This - und so weiter? Hmm, nette Idee! Danke!
InformationsquelleAutor xph | 2013-06-12
Schreibe einen Kommentar