Datei bis zu einem Zeichen lesen

8

Ich schreibe ein Skript, um X12 EDI-Dateien zu verarbeiten, die ich Zeile für Zeile durchlaufen möchte. Die Dateien bestehen aus einer Folge unterschiedlicher Datensätze, die jeweils durch ein Sonderzeichen (z. B. ~ , siehe unten) abgeschlossen sind. Die Dateien können groß sein (& gt; 100 MB), so dass ich das Ganze nicht reinlesen und aufteilen möchte. Die Datensätze sind nicht durch Zeilenumbrüche getrennt. Lesen in der ersten Zeile würde wahrscheinlich die ganze Datei lesen. Die Dateien sind all-ASCII.

Python bietet eindeutig die Möglichkeit, eine Datei bis zu einem bestimmten Zeichen zu lesen, vorausgesetzt, dass es sich bei diesem Zeichen um einen Zeilenumbruch handelt. Ich würde das Gleiche mit einem beliebigen Charakter machen. Ich gehe davon aus, dass das Lesen per Linie über Pufferung erfolgt. Ich könnte meinen eigenen gepufferten Leser implementieren, aber ich würde lieber den zusätzlichen Code und den Overhead vermeiden, wenn es eine bessere Lösung gibt.

Hinweis: Ich habe ein paar ähnliche Fragen gesehen, aber alle schienen zu dem Schluss zu kommen, dass man die Datei an der Zeile einlesen sollte, vorausgesetzt, dass die Zeilen eine vernünftige Größe hätten. In diesem Fall ist die gesamte Datei wahrscheinlich eine Zeile.

Edit: Das Segmentabschlusszeichen ist das 106ste Byte der Datei. Es ist nicht bekannt, bevor das Skript aufgerufen wird.

    
Thom Smith 17.02.2016, 14:42
quelle

3 Antworten

2

Dies ist noch lange nicht optimal, aber es wäre eine reine Python-Implementierung eines sehr einfachen Puffers:

%Vor%     
L3viathan 17.02.2016, 15:04
quelle
4

Wenn es zu Beginn keine Zeilenumbrüche in der Datei geben soll, wandeln Sie die Datei um, bevor Sie sie in Ihr Python-Skript einfügen, z. B .:

%Vor%

Verwenden Sie dann readline() , readlines() oder for line in file_object: entsprechend.

    
Wolf 17.02.2016 14:53
quelle
0

Vielleicht brauchen Sie so etwas

Warnung: Code nicht optimiert

%Vor%     
Maxim Panfilov 17.02.2016 15:03
quelle

Tags und Links