2011-02-16 5 views
3

Je travaille avec un ensemble important de fichiers texte. Beaucoup d'entre eux ont écrit dans des encodages différents. Je crée une liste d'objets qui contient certaines des sous-chaînes de ces fichiers texte. Je m'occupe des problèmes d'encodage lors de l'ouverture des fichiers (les objets sont créés correctement et peuvent être utilisés). Voici ma liste:Problèmes avec pickle et codages

len(hands) 
47580 
type(hands) 
<class 'list'> 
type(hands[0]) 
<class '__main__.BridgeHand'> 

Maintenant, j'essaie de décaper cet objet:

import pickle 
pickle.dump(hands, open("handspi.p", "wb")) 

Il crée un fichier de 9 Mo handspi. Les problèmes commencent lorsque je tente de unpickle il:

hh = pickle.load(open(#some path to this pickle file)) 

Trace de la pile se termine par:

File "C:\Python31\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 30: character maps to  <undefined> 

Que dois-je faire? Merci pour votre aide :)

+4

Vous n'avez pas montré la ligne de code exacte qui déclenche réellement l'erreur - c'est toujours une bonne idée de le faire. Probablement, vous n'ouvrez pas le fichier en mode binaire ('" rb "'), mais je ne peux que deviner. –

+0

Ouais, merci. Cela résout le problème, je suis retardé :( –

+0

Sven a répondu, mais je l'ai formalisé et posté comme réponse –

Répondre

7

Vous pouvez essayer d'ouvrir le fichier en mode binaire en cours de lecture en tant que fichier ASCII.

open('picklefile.pkl','rb') 
+0

Ouais, je copie collé de python wiki (http://wiki.python.org/moin/UsingPickle) où "rb" n'a pas été utilisé Je suppose que la raison en est que je suis sur windows :( –