J'ai chargé un fichier csv contenant des valeurs japonaises à l'aide du module csv de Python Problèmes dans les conditions suivantes et leurs solutions
sys.getdefaultencoding ()
: asciiPremière lecture normalement Le format de csv est Gardez-le sous la forme «entier, chaîne»
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]
Vous avez maintenant lu toutes les lignes de données Ensuite, ** extrayez les données qui incluent toute chaîne de caractères japonais dans le nom **
python
text = raw_input()
result = [row for row in rows if text in row.name]
Le problème se pose ici. La chaîne obtenue par raw_input ()
est ** de type unicode **
Cependant, ce que vous obtenez avec data.name
est le ** type utf-8 str ** lu par csv.reader.
Bien sûr, la comparaison n'est pas possible, donc une erreur se produit à ʻif texte dans row.name`.
La solution est
Je pense qu'il y a deux possibilités, mais comme c'est unicode qui est facile à manipuler, je vais utiliser le premier cette fois. Dans ce cas, ce qui doit être corrigé est
python
rows = [data(row[0], row[1]) for row in reader]
est. Faites ceci ici
python
rows = [data(row[0], row[1].decode('utf-8')) for row in reader]
str # decode
est un encodage de caractères arbitraire qui convertit le type str en type unicode. Cette fois, l'original est utf-8 str, donc je l'ai décodé avec utf-8 et l'ai changé en unicode.
Le décodage doit être modifié en fonction de l'encodage des caractères du fichier csv d'origine (naturellement)
Vous pouvez maintenant comparer les unicodes. Toutes nos félicitations Lorsque vous jouez avec python sous Windows, vous rencontrez souvent ce type de problème d'encodage de caractères.
Recommended Posts