Il suffit de passer open()
une chaîne de caractères Unicode pour le nom du fichier:
En Python 2.x:
>>> open(u'someUnicodeFilenameλ')
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780>
3.x Python, toutes les chaînes sont Unicode, donc il n'y a littéralement rien à ce .
Comme toujours, notez que la meilleure façon d'ouvrir un fichier est toujours d'utiliser le with
statement en conjonction avec open()
.
Edit: En ce qui concerne les conseils os.listdir()
varie de nouveau, sous Python 2.x, vous devez être prudent:
os.listdir(), qui renvoie les noms de fichiers, soulève une question: faut-il revenir la version Unicode des noms de fichiers, ou devrait-il retourner des chaînes de 8 bits contenant les versions codées? os.listdir() fera les deux, selon que vous avez fourni le chemin du répertoire sous la forme d'une chaîne de 8 bits ou d'une chaîne Unicode. Si vous passez une chaîne Unicode comme chemin, les noms de fichiers seront décodés en utilisant le codage du système de fichiers et une liste de chaînes Unicode sera renvoyée, tandis qu'un chemin de 8 bits retournera les versions 8 bits des noms de fichiers.
Source
Donc en bref, si vous voulez Unicode sur, mettre en Unicode:
>>> os.listdir(".")
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb']
>>> os.listdir(u".")
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb']
Notez que le fichier sera toujours ouvert de toute façon - il ne sera pas représenté bien à l'intérieur Python car ce sera une chaîne de 8 bits, mais ça marchera toujours.
open('someUnicodeFilename\xce\xbb')
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660>
Sous 3.x, comme toujours, il est toujours Unicode.
Le code que vous avez posté est comment je le ferais. Qu'est ce qui ne va pas avec ça? – kindall
Oui, qu'en est-il de ce code ne fonctionne pas? – agf