Python ne peuvent pas ouvrir les fichiers avec des caractères non-anglais en chemin
J'ai un fichier avec le chemin d'accès suivant : D:/bar/クレイジー-ヒッツ!/foo.abc
Je suis de l'analyse du chemin à partir d'un fichier XML et de le stocker dans une variable appelée path
dans la forme de file://localhost/D:/bar/クレイジー・ヒッツ!/foo.abc
Ensuite, les opérations suivantes sont effectuées :
path=path.strip()
path=path[17:] #to remove the file://localhost/ part
path=urllib.url2pathname(path)
path=urllib.unquote(path)
L'erreur est :
IOError: [Errno 2] No such file or directory: 'D:\\bar\\\xe3\x82\xaf\xe3\x83\xac\xe3\x82\xa4\xe3\x82\xb8\xe3\x83\xbc\xe3\x83\xbb\xe3\x83\x92\xe3\x83\x83\xe3\x83\x84\xef\xbc\x81\\foo.abc'
Mise à jour 1 : j'utilise Python 2.7 sous Windows 7
Windows ne pas utiliser l'UTF-8.
Alors, comment dois-je gérer cela?
L'utilisation d'un codage différent.
Essayez d'utiliser unicode chemin de chaîne à la place:
essayé cela ne fonctionne toujours pas.
Alors, comment dois-je gérer cela?
L'utilisation d'un codage différent.
Essayez d'utiliser unicode chemin de chaîne à la place:
path = path.decode('utf8')
avant que le reste de votre code.essayé cela ne fonctionne toujours pas.
OriginalL'auteur bcosynot | 2011-05-12
Vous devez vous connecter pour publier un commentaire.
Le chemin d'accès dans votre erreur est:
Je pense que c'est le encodés en utf-8 de la version de votre nom de fichier.
J'ai créé un dossier du même nom sur Windows7 et placé un fichier appelé 'abc.txt":
Il semble donc que Duncan suggestion de
path.decode('utf8')
fait le tour.Mise à jour
Je ne peux pas tester pour vous, mais je suggère que vous essayez de vérifier si le chemin d'accès contient des caractères non ascii avant de faire la
.decode('utf8')
. C'est un peu hacky...IOError: [Errno 2] No such file or directory: u'D:\\Music\\Pink Floyd\\The Wall Disc 1\\5 - Another Brick in the Wall, Pt. 2.mp3'
Aucune idée de ce que pourrait être le problème avec ce chemin?Essayé cela ne fonctionne toujours pas.
peut-être plus facile de commencer une nouvelle question et aller de là.
oups. il s'avère que j'avais quelques anciennes données. Ce fichier n'a pas effectivement existé et a été supprimé. Mais je pense vraiment que la mise à jour de votre code est le chemin à parcourir. Merci beaucoup pour votre aide!
J'espère que vous allez vous donner une claque amicale que vous n'êtes pas à portée de bras. La réponse s'est avéré être de Duncan commentaire/suggestion que vous avez dit n'a pas de travail et votre deuxième problème s'est avéré être que le fichier n'existe pas réellement. Ces choses ne vous font pas une simple personne pour l'aider.
OriginalL'auteur MattH
Fournir le nom de fichier comme
unicode
chaîne à laopen
appel.Comment produisez-vous le nom de fichier?
si elle est fournie comme une constante par vous
Ajouter une ligne au début de votre script:
Puis, dans un UTF-8 capable de l'éditeur, ensemble
path
à launicode
nom de fichier:lire à partir d'une liste du contenu du répertoire
Récupérer le contenu du répertoire à l'aide d'un
unicode
dirspec:lire à partir d'un fichier texte
Ouvrir le fichier contenant le fichier à l'aide de
codecs.open
à lireunicode
données. Vous devez spécifier l'encodage du fichier (parce que vous savez qu'est-ce que le “charset par défaut de windows” pour les applications non-Unicode sur votre ordinateur).en tout cas
:
avant d'ouvrir le fichier, remplacer l'encodage correct si ce n'est "utf8".
Quelque chose pour un ami Floyd fan 🙂 juste avant le
open
, veuillezprint(repr(path))
d'abord pour s'assurer que les barres obliques inverses sont aussi nombreux qu'ils le devraient. Post de retour ici.ahh. Floyd. Ici vous allez
u'D:\\Music\\Pink Floyd\\The Wall Disc 1\\5 - Another Brick in the Wall, Pt. 2.mp3'
S'avère que le fichier n'existe pas. J'étais en pourparlers avec certaines anciennes données. Merci beaucoup pour votre aide, si!
OriginalL'auteur tzot
Voici quelques trucs intéressant à partir de la la documentation:
Si je comprends bien, vous devriez passer le nom de fichier en unicode:
path=unicode(path,sys.getfilesystemencoding())
eu cette erreur -TypeError: decoding Unicode is not supported
Je pense que le chemin d'accès doit déjà être un unicode, donc vous devriez essayer de chemin.encode( encodage )
OK, donc il semble que le chemin est déjà une chaîne unicode. Dans ce cas, je voudrais essayer de coder le chemin que mbcs: chemin = chemin d'accès.coder(sys.getfilesystemencoding()); open(chemin d'accès).read().
j'ai joué un peu avec le codage d'un bit. Bien qu'il a résolu mon problème initial, j'ai maintenant un autre problème à portée de main. Jetez un oeil à mon commentaire sur l'autre réponse, par MattH
OriginalL'auteur codeape