Bestimmte Daten aus einer Datei auslesen
Verfasst: Samstag 20. September 2014, 20:13
Hallo,
ich habe ein decodiertes PCL-File, welches folgenden Aufbau hat (Ausschnitt):
Mein Ziel ist es nun, die Kommentare aus dem Datenstrom zu extrahieren.
Ein Kommentar beginnt mit "$HD-x wobei x einer Zahl zwischen 1 und 7 entspricht.
Der Kommentar endet mit $;".
Ich habe mir folgende Lösung überlegt, und würde gerne von Euch wissen, was man besser, mehr Pyhton-like, machen kann.
Die Daten sind im Prinzip in vier Spalten aufgeteilt.
1. Spalte = Offset
2. Spalte = Art des Eintrags
3. Spalte = Daten
4. Spalte = Erläuterung
Als erstes extrahiere ich die dritte Spalte in einen String, da das die Daten sind, die mich interessieren.
Danach jage ich einen Regulären Ausdruck über den String und lasse mir alle gefundenen Kommentare in eine Liste schreiben, die ich dann zurück gebe.
Anregungen? Besten Dank 
ich habe ein decodiertes PCL-File, welches folgenden Aufbau hat (Ausschnitt):
Code: Alles auswählen
000be0cf PCL Parameterised <Esc>*c15D Assign Font ID Number (identifier = 15)
000be0d5 PCL Parameterised <Esc>*c0F Font Control: Delete All Soft Fonts
000be0da PCL Parameterised <Esc>(s1P Primary Font: Spacing: Proportional
000be0df PCL Parameterised <Esc>(s12.00V Primary Font: Height (12.00 points)
000be0e8 PCL Parameterised <Esc>(s4148T Primary Font: Typeface (4148 = Univers)
000be0f0 PCL Parameterised <Esc>(s6.00V Primary Font: Height (6.00 points)
000be0f8 PCL Parameterised <Esc>*p3297.93Y Cursor Position Vertical (3297.93 PCL units)
000be103 PCL Parameterised <Esc>*p275.00X Cursor Position Horizontal (275.00 PCL units)
000be10d Data Gesch<ext>ftsf<ext>hrung: Hans-Lothar Sch<ext>fer (V
000be134 ors.), Steffen B<ext>tjer, Manfred Kreuzer, Karl Mol
000be164 l, Norbert Scheller, Thomas Werner <ext> Aufsichtsra
000be194 t: Hilko Schomerus (Vors.)
000be1af PCL Parameterised <Esc>%1B Enter HP-GL/2 Mode: Pen = PCL
Comment Switch language to HP-GL/2
000be1b3 HP-GL/2 Command IN; Initialise
000be1b6 HP-GL/2 Command CO"$HD-1$AB00800
000be1c6 00131033300000
000be1d4 0000120141231
000be1e2 07XYD 000001
000be1f0 0
000be1fe XXXX 00
000be20c 03
000be21a
000be228
000be236 $;" Comment
Comment Previous sequence not terminated by semi-colon
Comment Switch language to PCL
000be23d PCL Parameterised <Esc>%0A Enter PCL Mode: Cursor = PCL
000be241 PCL Parameterised <Esc>%1B Enter HP-GL/2 Mode: Pen = PCL
Comment Switch language to HP-GL/2
000be245 HP-GL/2 Command IN; Initialise
000be248 HP-GL/2 Command CO"$HD-2$00
000be258 000
000be266 00000000
000be274
000be282
000be290
000be29e
000be2ac
000be2ba
000be2c8 $;" Comment
Comment Previous sequence not terminated by semi-colon
Comment Switch language to PCL
000be2cf PCL Parameterised <Esc>%0A Enter PCL Mode: Cursor = PCL
000be2d3 PCL Parameterised <Esc>%1B Enter HP-GL/2 Mode: Pen = PCL
Comment Switch language to HP-GL/2
Ein Kommentar beginnt mit "$HD-x wobei x einer Zahl zwischen 1 und 7 entspricht.
Der Kommentar endet mit $;".
Ich habe mir folgende Lösung überlegt, und würde gerne von Euch wissen, was man besser, mehr Pyhton-like, machen kann.
Die Daten sind im Prinzip in vier Spalten aufgeteilt.
1. Spalte = Offset
2. Spalte = Art des Eintrags
3. Spalte = Daten
4. Spalte = Erläuterung
Als erstes extrahiere ich die dritte Spalte in einen String, da das die Daten sind, die mich interessieren.
Code: Alles auswählen
COL_COMMENT_BEGIN = 40
COL_COMMENT_END = 54
with open(filename) as f:
value_data = ''.join([l[COL_COMMENT_BEGIN:COL_COMMENT_END]
for l in f])
Code: Alles auswählen
return re.findall(r'"\$HD-[1-7].*?\$;"', value_data)
