Ich lese eine Datei in Python, wo jeder Datensatz durch eine leere neue Zeile getrennt ist. Wenn die Datei in zwei oder mehr Zeilen endet, wird der letzte Datensatz wie erwartet verarbeitet. Wenn die Datei jedoch in einer einzelnen neuen Zeile endet, wird sie nicht verarbeitet. Heres der Code:Die letzte neue Zeile beim Lesen einer Datei beibehalten
def fread():
record = False
for line in open('somefile.txt'):
if line.startswith('Record'):
record = True
d = SomeObject()
# do some processing with line
d.process(line)
if not line.strip() and record:
yield d
record = False
for record in fread():
print(record)
In dieser Datenprobe, funktioniert alles wie erwartet ('---' ist eine leere Zeile):
Aufnahme 1
Daten ein
Daten b
Daten c
\ n
Record 2
Daten a
Daten b
Daten c
\ n
\ n
Aber in diesem, isn't der letzte Datensatz zurückgegeben:
Aufnahme 1
Daten a
Daten b
Daten c
\ n
Datensatz 2
Daten a
Daten b
Daten c
\ n
Wie kann ich die letzte neue Zeile aus der Datei den letzten Datensatz zu erhalten bewahren?
PS .: Ich benutze den Begriff "bewahren", da ich keinen besseren Namen finden konnte.
Danke.
Bearbeiten Der ursprüngliche Code war eine bereinigte Version, nur um das Problem zu veranschaulichen, aber es scheint, dass ich zu viel abgestreift habe. Jetzt habe ich den Code aller Funktionen gepostet.
Ein wenig mehr Erklärung: Das Objekt SomeObject
wird für jeden Datensatz in der Datei erstellt und die Datensätze werden durch leere neue Zeilen getrennt. Am Ende des Datensatzes gibt es das Objekt zurück, so dass ich es verwenden kann (in einem DB speichern, mit anderen Objekten vergleichen usw.).
Das Hauptproblem, wenn die Datei in einer einzelnen neuen Zeile endet, wird der letzte Datensatz nicht zurückgegeben. Es scheint, dass Python die letzte Zeile nicht liest, wenn sie leer ist.
Sie haben richtig verstanden und ich habe meinen Beitrag bearbeitet, um klarer zu sehen, was ich möchte. Dein Ansatz ist sehr gut und löst mein Problem, vielen Dank, aber warum liest Python nicht die letzte Zeile, wenn sie leer ist? –