par-Datei öffnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
phytonist
User
Beiträge: 6
Registriert: Dienstag 15. November 2011, 12:41

Hallo,
Ich möchte Daten aus einer par-Datei (SolidEdge(CAD)-Teiledatei) einlesen.
Bisher (ohne python) habe ich diese Datei mit unzip geöffnet, dann nach einem bestimmten Eintrag gesucht und dies betrachtet. Ebenso könnte ich das mit einem Texteditor ansehen.
Das geht bei einer Datei, nicht aber bei 100. Deshalb soll ein python-Prgramm her. Die Idee ist: Die Dateien zeilenweise auslesen und die gesuchten Werte dann für alle in eine xls-Datei abspeichern.
Eigentlich ganz simpel:

Code: Alles auswählen

ein_dateiname="AHP.par"
e_datei=open(ein_dateiname,'r')
anz_zeile=0
anzt=0
zeile=e_datei.readline()
for zeile in e_datei:
Ich hatte schon andere Dateien mit open() geöffnet, bei diesen par-Dateien kommt aber ein Fehler:

Code: Alles auswählen

Ausnahme "UnicodeDecodeError"
'charmap' codec can't decode byte 0x81 in position 88: character maps to <undefined>
Es scheinen also Zeichen drin sein, die readline() nicht lesen will.

Gibt es da eine andere Funktion?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Python entzippt nicht magisch für dich. Du musst das Modul zipfile benutzen, und dann über die Inhalte zeilenweise iterieren.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Gibt es neben ein_dateiname auch noch anderer_dateiname, oder was soll das Präfix ein bedeuten? Benutze keine Abkürzungen, die sind schwer verständlich. Das selbe gilt für e_datei, anz_zeile oder anzt.
Dateien öffnet man immer mit dem with-Statement und gibt ein Encoding an. Bei Dir ist das implizite Encoding falsch und Du mußt explizit das richtige Encoding angeben. Welches das ist, hängt davon ab, wie diese par-Datei geschrieben worden ist.
Du liest die erste Zeile der Datei ein, und machst dann nichts damit. Das sieht falsch aus. Falls das doch richtig ist, sollte das kommentiert werden.
phytonist
User
Beiträge: 6
Registriert: Dienstag 15. November 2011, 12:41

Ich ziehe den Code von oben zurück und habe hier 3 Zeilen, die das Problem verdeutlichen sollen:

Code: Alles auswählen

dateiname="AHP.par"
e_datei=open(dateiname,'r')
zeile=e_datei.readlines()
Als Fehlermeldung kommt:

Code: Alles auswählen

Ausnahme "UnicodeDecodeError"
'charmap' codec can't decode byte 0x81 in position 88: character maps to <undefined>
Es handelt sich um keine text-Datei, sondern um eine Binärdatei.
Gibt es eine andere Funktion, um dies beliebige Datei einzulesen?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du eine Binärdatei hast, warum tust Du dann so, als ob Du eine Textdatei hättest? Denn Binärdateien haben keine Zeilen.

Code: Alles auswählen

with open(dateiname, "rb") as file:
    data = file.read()
Antworten