semplicemente passare open()
una stringa unicode per il nome del file:
In Python 2.x:
>>> open(u'someUnicodeFilenameλ')
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780>
In Python 3.x, tutte le stringhe sono Unicode, quindi non c'è letteralmente nulla ad esso .
Come sempre, si noti che il modo migliore per aprire un file è sempre quello di utilizzare with
statement insieme a open()
.
Edit: Per quanto riguarda il consiglio os.listdir()
varia di nuovo, sotto Python 2.x, bisogna stare attenti:
os.listdir(), che restituisce i nomi dei file, solleva un problema: dovrebbe ritorno la versione Unicode dei nomi di file o dovrebbe restituire stringhe a 8 bit contenenti le versioni codificate? os.listdir() farà entrambe le cose, a seconda che tu abbia fornito il percorso della directory come una stringa da 8 bit o una stringa Unicode. Se si passa una stringa Unicode come percorso, i nomi dei file verranno decodificati utilizzando la codifica del file system e verrà restituito un elenco di stringhe Unicode, mentre il passaggio di un percorso a 8 bit restituirà le versioni a 8 bit dei nomi file.
Source
Così, in breve, se si vuole Unicode fuori, messo in Unicode:
>>> os.listdir(".")
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb']
>>> os.listdir(u".")
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb']
Si noti che il file verrà comunque aprire in entrambi i casi - non sarà rappresentato ben all'interno Python come sarà una stringa a 8 bit, ma funzionerà ancora.
open('someUnicodeFilename\xce\xbb')
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660>
Sotto 3.x, come sempre, è sempre Unicode.
Il codice che hai postato è come lo farei. Che cosa c'è che non va? – kindall
Sì, che dire di quel codice non funziona? – agf