Просто передайте open()
Юникода строку для имени файла:
В Python 2.x:
>>> open(u'someUnicodeFilenameλ')
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780>
В Python 3.x, все строки Unicode, так что нет буквально ничего к нему ,
Как всегда, обратите внимание, что лучший способ открыть файл - всегда использовать with
statement совместно с open()
.
Edit: Что касается os.listdir()
совет снова изменяется под Python 2.x, вы должны быть осторожны:
os.listdir(), которая возвращает имена файлов, поднимает вопрос: должен ли он возвращение версию файлов в формате Unicode, или она должна возвращать 8-битные строки, содержащие кодированные версии? os.listdir() будет выполнять оба варианта, в зависимости от того, был ли указан путь к каталогу в виде 8-битовой строки или строки Unicode. Если вы передадите строку Unicode в качестве пути, имена файлов будут декодированы с использованием кодировки файловой системы, и список строк Unicode будет возвращен, а передача 8-битного пути вернет 8-битные версии имен файлов.
Source
Короче говоря, если вы хотите Unicode из, поставить Unicode в:
>>> os.listdir(".")
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb']
>>> os.listdir(u".")
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb']
Обратите внимание, что файл будет по-прежнему открывать в любом случае - это не будет хорошо представлена в Python, поскольку это будет 8-битная строка, но она все равно будет работать.
open('someUnicodeFilename\xce\xbb')
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660>
Под 3.x, как всегда, это всегда Юникод.
Код, который вы выложили, как я бы это сделать. Что с этим не так? – kindall
Да, а как насчет этого кода не работает? – agf