2017-02-17 4 views
-1

Ich habe eine sehr große Datei wie folgt formatiert:Lesen in einer Datei, einem Klumpen zu einem Zeitpunkt

(mydelimiter) 
line 
line 
(mydelimiter) 
line 
line 
(mydelimiter) 

Da die Datei so groß ist, ich kann nicht alles in den Speicher auf einmal lesen kann. Also würde ich jeden Block zwischen "(mydelimiter)" auf einmal lesen, einige Operationen darauf durchführen und dann den nächsten Block einlesen. Diese

ist der Code Ich habe bisher:

with open(infile,'r') as f: 
    chunk = [] 
    for line in f: 
     chunk.append(line) 

Nun, ich bin nicht sicher, wie Python zu sagen „halten Zeilen angehängt, bis Sie eine andere Linie treffen mit‚(mydelimiter)‘drin“, Speichern Sie die Zeile dort, wo sie gestoppt wurde, und starten Sie sie in der nächsten Iteration der for-Schleife.

Hinweis: Es ist auch nicht möglich, eine bestimmte Anzahl von Zeilen gleichzeitig einzulesen, da jeder Block eine variable Länge hat.

+0

Bitte Link zu Fragen, von denen Sie glauben, dass ich dupliziert habe. Ich habe Stackoverflow gründlich durchsucht, bevor ich diese Frage gepostet habe und keine Antwort gefunden habe. – Andrade

+0

Der Link befindet sich oben auf der Seite unter dem Titel Ihrer Frage. – TigerhawkT3

Antwort

1

Sind Sie nicht vielleicht über das denken? Etwas so einfaches wie der folgende Code kann den Trick für Sie tun

with open(infile,'r') as f: 
    chunk = [] 
    for line in f: 
     if line == 'my delimiter': 
      call_something(chunk) 
      chunk=[] 
     else : 
      chunk.append(line) 
+0

Danke für die Antwort! Können Sie hier erklären, was Ihre call_something() Funktion macht? – Andrade

+0

Nun call_something ist eine Funktion, die Sie definieren, die mit Ihrem Stück Daten funktioniert – e4c5

+0

Ja, danke !! Ich akzeptiere deine Antwort (Entschuldigung dafür, dass du das vergessen hast!) – Andrade

Verwandte Themen