simplemente pasan open()
una cadena Unicode para el nombre de archivo:
En Python 2.x:
>>> open(u'someUnicodeFilenameλ')
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780>
En Python 3.x, todas las cadenas son Unicode, por lo que literalmente no hay nada a ella .
Como siempre, tenga en cuenta que la mejor manera de abrir un archivo es siempre utilizando with
statement junto con open()
.
Editar: En cuanto a los consejos os.listdir()
nuevo varía, bajo Python 2.x, hay que tener cuidado:
os.listdir(), que devuelve los nombres de archivo, plantea una cuestión: ¿debe retorno la versión Unicode de nombres de archivos, o debería devolver cadenas de 8 bits que contienen las versiones codificadas? os.listdir() hará ambas cosas, dependiendo de si proporcionó la ruta del directorio como una cadena de 8 bits o una cadena Unicode. Si pasa una cadena Unicode como ruta, los nombres de archivo se decodificarán utilizando la codificación del sistema de archivos y se devolverá una lista de cadenas Unicode, mientras que al pasar una ruta de 8 bits se devolverán las versiones de 8 bits de los nombres de archivo.
Source
Así que en resumen, si quieres Unicode a cabo, poner en Unicode:
>>> os.listdir(".")
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb']
>>> os.listdir(u".")
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb']
Tenga en cuenta que el archivo todavía se abrirá en cualquier caso - no va a ser representada dentro Python, ya que será una cadena de 8 bits, pero seguirá funcionando.
open('someUnicodeFilename\xce\xbb')
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660>
En virtud de 3.x, como siempre, siempre es Unicode.
El código que has publicado es la forma en que lo haría. ¿Qué pasa con eso? – kindall
Sí, ¿qué pasa con ese código que no funciona? – agf