Hallo Spezialisten,
habe folgenden Script gestartet:
with open('C:/users/datanorm.002', 'r', encoding="cp1252") as file:
for line_count, line in enumerate(file):
print(f"{line_count}: {repr(line)}")
if line_count > 1000:
break
(Habe ich von sparrow freundlicher weise zur Verfügung bekommen).
Es kommt jedoch folgende Fehlermeldung:
File "C:/Users/PycharmProjects/lagerverwaltung/DivTest.py", line 20, in <module>
for line_count, line in enumerate(file):
File "C:\Users\AppData\Local\Programs\Python\Python38\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 153: character maps to <undefined>
Ich möchte eine Datanormdatei Version 4 einlesen welche mit Zeichencode MS-DOS erstellt worden ist
mit Umlauten. Am Zeilenende ist carriage return+line feed. Das Problem liegt anscheinend bei den Umlauten?
Könnt Ihr mir da helfen.
Danke vielmals für eure Mühe.
Datei von MS-Dos auf cp1252 konvertieren
Dann ist die Datei nicht so kodiert, wie du dachtest. Denn in dem anderen Script hast du "ANSI" verwendet - und das ist cp1252.
Welches Programm hat die Datei denn geschrieben? Die Standardcodierung für MS-Dos in Westeuropa ist CP850:
Welches Programm hat die Datei denn geschrieben? Die Standardcodierung für MS-Dos in Westeuropa ist CP850:
Code: Alles auswählen
with open('C:/users/datanorm.002', 'r', encoding="cp850") as file:
for line_count, line in enumerate(file):
print(f"{line_count}: {repr(line)}")
if line_count > 1000:
break
Danke für Deine Antwort. ü=Hex81 - Decimal129, ä=Hex84 - Decimal 132, Ö=Hex99 - Decimal 153 usw. Ich habe die Datei einfach mit Notepad auf Ansi konvertiert um überhaupt was machen zu können. Du hast recht die Datanormdateien werden mit Codepage 850 erstellt. Daher das Problem beim einlesen. Wie kann ich also die Datei bei einlesen in sqlite-Datenbank so ändern das die Umlaute richtig angezeigt werden bzw. auch gedruckt werden.
Danke für Deine Mühe.
Danke für Deine Mühe.
Warum öffnest du die Datei vorher mit einem anderen Programm, um sie zu konvertieren?!?
Ich frage nochmal: Welches Programm unter welcher Umgebung schreibt die ursprüngliche Datei? Und weißt du, wie diese kodiert ist?
Beim Öffnen liest du die Datei mit der korrekte Kodierung ein, Python repräsentatiert Zeichenketten intern als Unicode. Aber dafür musst du angeben, was die Ursprungskodierung ist.
Ich frage nochmal: Welches Programm unter welcher Umgebung schreibt die ursprüngliche Datei? Und weißt du, wie diese kodiert ist?
Beim Öffnen liest du die Datei mit der korrekte Kodierung ein, Python repräsentatiert Zeichenketten intern als Unicode. Aber dafür musst du angeben, was die Ursprungskodierung ist.
Danke für Deine Fragen.
Ich habe die Datei einfach anders konvertiert weil ich es einfach ausprobiert habe!
Die Datei ist eine Datanormdatei Version 4 mit Codierung Codepage 850. Ich
möchte Teile davon in eine Sqlite-Datenbank einlesen. Schaffe es aber nicht,
wenn der Umlaute. Da kommt von Python ein Fehlermeldung. Also bitte ich
würde eine Hilfe brauchen wie ich von der Codepage 850 auf die Codepage
komme die Python verwendet.
Danke nochmal für eure Mühe.
Ich habe die Datei einfach anders konvertiert weil ich es einfach ausprobiert habe!
Die Datei ist eine Datanormdatei Version 4 mit Codierung Codepage 850. Ich
möchte Teile davon in eine Sqlite-Datenbank einlesen. Schaffe es aber nicht,
wenn der Umlaute. Da kommt von Python ein Fehlermeldung. Also bitte ich
würde eine Hilfe brauchen wie ich von der Codepage 850 auf die Codepage
komme die Python verwendet.
Danke nochmal für eure Mühe.
Python verwendet intern Unicode. Das ist keine Codepage. Du möchtest die Datei so einlesen, dass die Daten hinterher in Python als Unicode vorliegen. Dafür verwendet man beim Öffnen den encoding-Parameter und gibt als Wert das Encoding der Datei an. Wie das geht hat sparrow schon in einem Beitrag gezeigt.
@ossi047: Ich verstehe ehrlich gesagt nicht, warum du nicht einfach meine Fragen beantwortest.
Wenn du die Datei mit cp850 Encoding öffnest (und das habe ich oben gezeigt) und anschließend die Umlaute nicht stimmen, dann ist die Datei nicht mit cp850 kodiert. Oder besser: Sie ist vielleicht cp850 kodiert, aber bei deinem Versuch da etwas mit einem Editor zu konvertieren ist etwas schief gelaufen. Wahrscheinlich, weil der Editor, mit dem du die Konvertierung durchgeführt hat, die Kodierung der Ursprungsdatei nicht kannte.
Deshalb wollte ich ja wissen, woher die _Ursprungsdatei_ kommt. Welches Programm sie unter welcher Umgebung geschrieben hat. Weil das vielleicht einen Hinweis auf die Kodierung gibt.
Wenn du die Datei mit cp850 Encoding öffnest (und das habe ich oben gezeigt) und anschließend die Umlaute nicht stimmen, dann ist die Datei nicht mit cp850 kodiert. Oder besser: Sie ist vielleicht cp850 kodiert, aber bei deinem Versuch da etwas mit einem Editor zu konvertieren ist etwas schief gelaufen. Wahrscheinlich, weil der Editor, mit dem du die Konvertierung durchgeführt hat, die Kodierung der Ursprungsdatei nicht kannte.
Deshalb wollte ich ja wissen, woher die _Ursprungsdatei_ kommt. Welches Programm sie unter welcher Umgebung geschrieben hat. Weil das vielleicht einen Hinweis auf die Kodierung gibt.
So, in der Mittagspause die Chance genutzt.
Sieht so aus, als wäre Datanorm ein Austauschformat für Artikelstammdaten, das seinen Ursprung in den 80ern hat und besagt Version 4 ist von 1994.
Die Spezifikationen habe ich auf die Schnelle nicht frei zugänglich gefunden.
Ich bin mir aber recht sicher, dass es entweder CP850 oder CP1252 sein sollte.
Also die Ursprungsdatei (nicht irgendwas "konvertiertes") nehmen und schauen ob sich die Dateien mit einer der Codpage-Codierungen lesen und lassen und die Umlaute stimmen.
Sieht so aus, als wäre Datanorm ein Austauschformat für Artikelstammdaten, das seinen Ursprung in den 80ern hat und besagt Version 4 ist von 1994.
Die Spezifikationen habe ich auf die Schnelle nicht frei zugänglich gefunden.
Ich bin mir aber recht sicher, dass es entweder CP850 oder CP1252 sein sollte.
Also die Ursprungsdatei (nicht irgendwas "konvertiertes") nehmen und schauen ob sich die Dateien mit einer der Codpage-Codierungen lesen und lassen und die Umlaute stimmen.
Hallo liebe Spezialisten,
ich habe mich jetzt einen ganzen weitern Tag damit beschäftigt.
Danke für die vielen Tipps (habe ich teilweise auch nicht verstanden)
aber IHR habt mich auf den richtigen Weg geleitet.
Ich lese die Datanormdatei mit cp850 ein und speichere sie
mit ansi in eine csv Datei. Wo ich sie in Excel weiterverarbeite
und die Umlaute stimmen auch. Später kommt dann der nächste
Versuch die gewählten Daten in eine Datenbank zu schreiben.
Danke nochmals für die viele Zeit die IHR aufgewendet habt.
Aber es könnte sein das ich ev. wieder einmal was fragen werden.
ich habe mich jetzt einen ganzen weitern Tag damit beschäftigt.
Danke für die vielen Tipps (habe ich teilweise auch nicht verstanden)
aber IHR habt mich auf den richtigen Weg geleitet.
Ich lese die Datanormdatei mit cp850 ein und speichere sie
mit ansi in eine csv Datei. Wo ich sie in Excel weiterverarbeite
und die Umlaute stimmen auch. Später kommt dann der nächste
Versuch die gewählten Daten in eine Datenbank zu schreiben.
Danke nochmals für die viele Zeit die IHR aufgewendet habt.
Aber es könnte sein das ich ev. wieder einmal was fragen werden.
- __blackjack__
- User
- Beiträge: 14053
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@ossi047: Bitte nicht mit ”ANSI”. Diese Kodierung gibt es nicht, das funktioniert nur unter Windows, und ist verwirrend. Die Kodierung heisst CP1252.
Falls nicht irgendein anderes Programm *diese* Kodierung zwingend benötigt, würde ich die nicht verwenden, sondern UTF-8.
Falls nicht irgendein anderes Programm *diese* Kodierung zwingend benötigt, würde ich die nicht verwenden, sondern UTF-8.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari