UnicodeDecodeError en Python 3 lors de l'importation d'un fichier CSV
J'essaie d'importer un fichier CSV, à l'aide de ce code:
import csv
import sys
def load_csv(filename):
# Open file for reading
file = open(filename, 'r')
# Read in file
return csv.reader(file, delimiter=',', quotechar='\n')
def main(argv):
csv_file = load_csv("myfile.csv")
for item in csv_file:
print(item)
if __name__ == "__main__":
main(sys.argv[1:])
Voici un exemple de mon fichier csv:
foo,bar,test,1,2
this,wont,work,because,α
Et l'erreur:
Traceback (most recent call last):
File "test.py", line 22, in <module>
main(sys.argv[1:])
File "test.py", line 18, in main
for item in csv_file:
File "/usr/lib/python3.2/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 40: ordinal not in range(128)
Évidemment, C'est de frapper le caractère à la fin de la CSV et de les jeter cette erreur, mais je suis à une perte quant à la façon de résoudre ce problème. Toute aide?
C'est:
Python 3.2.3 (default, Apr 23 2012, 23:35:30)
[GCC 4.7.0 20120414 (prerelease)] on linux2
OriginalL'auteur Ryan Rapini | 2012-10-05
Vous devez vous connecter pour publier un commentaire.
Il semble que votre problème se résume à:
Vous pu le résoudre en spécifiant
PYTHONIOENCODING
:Remarque:
devrait fonctionner comme si votre configuration du terminal prend en charge, où
test.py
:Si
open()
n'a pas deencoding
paramètre ci-dessus, alors vous aurezUnicodeDecodeError
avecLC_ALL=C
.Aussi avec
LC_ALL=C
vous aurezUnicodeEncodeError
même si il n'y a pas de redirection c'est à dire,PYTHONIOENCODING
est nécessaire dans ce cas.OriginalL'auteur jfs
De la python docs, vous devez définir le type d'encodage du fichier. Voici un exemple à partir du site:
Edit: Votre problème semble se produire avec l'impression. Essayez d'utiliser assez d'imprimante:
file = open(filename, 'r', encoding='utf-8')
me donne encoreUnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 40: ordinal not in range(128)
Ah, il a à voir avec
print
ne pas être capable de afficher les caractères unicode. Cette question sur Quora, peut être la solution -- il utilise assez imprimante: quora.com/How-do-you-print-a-python-unicode-data-structureJe pense que l'erreur n'a rien à voir avec l'impression à tous. Il frappe à l'erreur au début de la boucle, avant de l'imprimer() fonctionne même. Votre édité un exemple de code utilisant pprint donne la même erreur qu'avant, en plus de renforcer cette affirmation. Je suis perplexe.
export PYTHONIOENCODING=utf-8
fixé mon problème.PYTHONIOENCODING=utf-8 corrigé mon problème." pourriez-vous expliquer davantage?
OriginalL'auteur TheDude