Ich habe eine CSV-Datei mit japanischen Werten mit dem CSV-Modul von Python geladen Probleme unter folgenden Bedingungen und deren Lösungen
sys.getdefaultencoding ()
: asciiZuerst normal lesen Das Format von csv ist Behalten Sie es in der Form "Ganzzahl, Zeichenfolge"
python
class data:
def __init__(self, id, name):
self.id = id
self.name = name
import csv
csvfile = open(filename)
reader = csv.reader(csvfile)
rows = [data(row[0], row[1]) for row in reader]
Sie haben jetzt alle Datenzeilen gelesen Als nächstes ** extrahieren Sie Daten, die eine japanische Zeichenfolge im Namen enthalten **
python
text = raw_input()
result = [row for row in rows if text in row.name]
Hier tritt das Problem auf. Die von raw_input () erhaltene Zeichenfolge ist vom Typ ** Unicode **
Was Sie jedoch mit data.name
erhalten, ist der von csv.reader gelesene Typ ** utf-8 str **.
Ein Vergleich ist natürlich nicht möglich, daher tritt ein Fehler bei "if text in row.name" auf.
Die Lösung ist
Ich denke, es gibt zwei Möglichkeiten, aber da es sich um einen einfach zu handhabenden Unicode handelt, werde ich diesmal den ersteren verwenden. In diesem Fall muss Folgendes behoben werden
python
rows = [data(row[0], row[1]) for row in reader]
ist. Mach das hier
python
rows = [data(row[0], row[1].decode('utf-8')) for row in reader]
str # decode
ist eine beliebige Zeichenkodierung, die den str-Typ in den Unicode-Typ konvertiert. Dieses Mal ist das Original utf-8 str, also habe ich es mit utf-8 dekodiert und in Unicode geändert.
Die Dekodierung muss abhängig von der Zeichenkodierung der ursprünglichen CSV-Datei geändert werden (natürlich).
Jetzt können Sie Unicodes vergleichen. Herzliche Glückwünsche Wenn Sie unter Windows mit Python spielen, treten häufig Probleme mit der Zeichencodierung auf.
Recommended Posts