2017-06-02 2 views
0

Je dispose d'un fichier Achards dans un chemin qui contient des caractères non-ascii:Comment faire pour supprimer le fichier quand il y a un caractère non-ascii dans le chemin?

D:/sämple_dürectory/31.0mm_e_e1.oes

Comme vous pouvez le voir, c'est sur une machine Windows. Lorsque je tente de unpickle, je reçois une erreur d'encodage:

filename = 'D:/sämple_dürectory/31.0mm_e_e1.oes' 
with open(filename, 'rb') as file_in: 
    loaded = pickle.load(file_in) 

résultats dans:

UnicodeDecodeError      Traceback (most recent call last) 
<ipython-input-10-ff988755db3a> in <module>() 
     1 with open(filename, 'rb') as file_in: 
----> 2  pickle.load(file_in) 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xca in position 616: ordinal not in range(128) 

Étrangement, ce n'est pas un problème lorsque je tente d'ouvrir ensemble numpy (de .npy) dans au même endroit, même lorsque numpy utilise également le cornichon, donc il doit clairement y avoir une façon de le faire.

+2

Êtes-vous sûr que le nom de fichier est le problème et non le contenu du fichier décapé? Pouvez-vous essayer avec un fichier trivial (sans chaîne) sur le même chemin? –

+1

Oh, le fichier sans chaîne fonctionne également. Cela semble vraiment comme un problème avec mon fichier. Merci beaucoup pour votre conseil! –

+0

Pas de soucis. Je ne suis pas familier avec le décapage mais le ['encoding' kwarg de' pickle.load'] (https://docs.python.org/3/library/pickle.html#pickle.load) semble pertinent. –

Répondre

1

Le problème n'est pas le chemin du tout, c'est un problème du fichier décapé.

Peut-être que vous avez décapé avec une version de python et essayé de défaire avec un autre?

Essayez le réglage du codage de l'objet décapé (fonctionne uniquement si vous utilisez python3) comme ceci:

with open(filename, 'rb') as file_in: 
    d = pickle.load(file_in, encoding='latin1') 

Peut-être essayer un autre encodage!

EDIT:

Si vous êtes en python 2.7, essayez:

with open(filename, 'rb') as file_in: 
    u = pickle._Unpickler(file_in) 
    u.encoding = 'latin1' 
    p = u.load()