Japanisches CSV File einlesen

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
SeriousRuffy
User
Beiträge: 32
Registriert: Dienstag 16. Dezember 2014, 21:16

Hallo zusammen,

würde gerne eine japanisches csv File in Python einlesen. Habe es zuerst so versucht:

Code: Alles auswählen

import csv
import re

lesdatei = open("Japanese.csv", "r")
liste = lesdatei.readlines()

for row in liste[1:]:
    felder = re.split(",|;", row)
    print(str(felder[10]))
Response dazu ist:

Code: Alles auswählen

????
Hokkaido
???????????
???????????
???????????
???????????
???????????
???????????
???????????
???????????
???????????
No Data
No Data
No Data
No Data

Da es nicht alle Ergebnisse richtig anzeigt, habe ich es versucht in UTF-8 umzuwandeln:

Code: Alles auswählen

# -*- coding: utf-8 -*-
import csv
import re

lesdatei = open("Japanese.csv", "r", encoding="utf-8")


liste = lesdatei.readlines()

for row in liste[1:]:
    felder = re.split(",|;", row)
    print(str(felder[10]))
Bekomme hier als Response zurück:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/khein/PycharmProjects/untitled1/Japanese", line 10, in <module>
    liste = lesdatei.readlines()
  File "C:\Python34\lib\codecs.py", line 313, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 6165: invalid start byte

Könnt ihr mir Tipps geben, wie ich weiter machen kann? Danke fü euer Feedback:)
BlackJack

@SeriousRuffy: Bei kodierten Textdateien bei denen die Kodierung nicht irgendwo als Metadaten gespeichert ist, muss man die Kodierung entweder kennen, oder man muss sie raten. Mehr kann man da nicht machen. Frag den der die Datei erzeugt hat welche Kodierung er dafür verwendet hat.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich würde als erstes das ``csv``-Modul für das Einlesen von CSV-Dateien nutzen!

Als nächstes kommt die Frage, ob die Datei wirklich auch UTF-8 codiert ist? Die Fehlermeldung sagt ja "nein" ;-)

Ein Aufruf von ``print`` auf einem System, bei dem der Unicode-String nicht in das Default-Encoding gewandelt werden kann, dürfte Dir dann auch einen ``UnicodeEncodeError`` bescheren... das dürfte auf so ziemlich jedem westlichen Windows der Fall sein, wenn Du japanische Schriftzeichen ausgeben willst...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
SeriousRuffy
User
Beiträge: 32
Registriert: Dienstag 16. Dezember 2014, 21:16

Danke für euer Feedback.

Habe den Delimiter geändert. Nun funktioniert es.

Code: Alles auswählen

# -*- coding: utf-8 -*-
import csv
import re


lesdatei = open("Japanese.csv", "r")


liste = lesdatei.readlines()

for row in liste[1:]:
    felder = re.split(";", row)
    print(str(felder[10]))

BlackJack

@SeriousRuffy: Das halte ich für sehr unwahrscheinlich das *diese* Änderung das Problem gelöst hat.
Antworten