2016-12-19 3 views
0

Die Antworten auf die Fragen der Art „Wie kann ich tun‚ während nicht (Datei) eof‘“Python 3 durchläuft eine Datei bis EOF. Die Datei ist nicht nur eine Reihe von ähnlichen Linien benötigen Verarbeitung

nicht ganz mein Problem decken

Ich habe eine Datei mit einem Format wie

Kopfblock

Daten

ein weiterer Kopfblock

mehr Daten (mit beliebigen Anzahl von Datenleitungen in jedem Datenblock)

...

Ich weiß nicht, wie viele Header-Datensätze gibt es

ich erfolgreich den ersten Block gelesen haben, dann eine Menge von Daten, die Schleifen verwenden, die nach der Leerzeile am Ende des Datenblocks suchen.

Ich kann nicht einfach den Ansatz "für jede Zeile in Openfile" verwenden, da ich die Header-Datenblöcke einzeln lesen und dann verarbeiten muss.

Wie kann ich den letzten Header-Datenblock erkennen?

Mein derzeitiger Ansatz besteht darin, einen Versuch außer der Konstruktion zu verwenden und auf die Ausnahme zu warten. Nicht besonders elegant.

Antwort

1

Es ist schwer zu beantworten, ohne dass der Code zu sehen ...

Aber meine Vermutung ist, dass Sie die Datei mit fp.read() lesen:

fp = open("a.txt") 
while True: 
    data = fp.read() 

Statt:

  1. try um immer die Länge der von Ihnen betrachteten Daten zu übergeben
  2. Überprüfen Sie, ob der gelesene Chunck eine leere Zeichenfolge ist, nicht None

Zum Beispiel:

fp = open("a.txt") 
while True: 
    header = fp.read(headerSize) 
    if header is '': 
     # End of file 
     break 
    read_dataSize_from_header 
    data = fp.read(dataSize) 
    if data is '': 
     # Error reading file 
     raise FileError('Error reading file') 
    process_your_data(data) 
+0

Am Ende habe ich eine Last von regexp Änderungen und es war leicht Leerzeilen bis EOF zu entfernen und den Anfang eines Blockes zu erkennen. – nerak99

Verwandte Themen