открыть файл с именем unicode?
кажется, я не могу открыть файл с именем unicode. Допустим, я делаю:
for i in os.listdir():
open(i, 'r')
когда я пытаюсь найти какое-то решение, я всегда получаю страницы о том, как читать и писать строку unicode в файл, а не как открыть файл с file()
или open()
который имеет имя unicode.
2 ответов
просто передать open()
строка Юникода для имени файла:
В Python 2.x:
>>> open(u'someUnicodeFilenameλ')
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780>
В Python 3.x, все строки являются Unicode, поэтому в нем буквально ничего нет.
как всегда, обратите внимание, что лучший способ открыть файл всегда использует with
сообщении в сочетании с open()
.
Edit: в отношении os.listdir()
совет снова меняется, под Python 2.х, вы должны быть осторожны:
os.listdir (), который возвращает имена файлов, вызывает проблему: должен ли он возвращать версию имен файлов Unicode или должен возвращать 8-битные строки, содержащие кодированные версии? ОС.listdir () будет делать оба, в зависимости от того, указан ли путь к каталогу в виде 8-битной строки или строки Юникода. Если вы передадите строку Юникода в качестве пути, имена файлов будут декодированы с использованием кодировки файловой системы, и список строк Юникода будет возвращен, при передаче 8-битного пути 8-разрядные версии песен.
короче говоря, если вы хотите Unicode out, поместите 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, как всегда, это всегда Unicode.
вы можете попробовать это:
import os
import sys
for filename in os.listdir(u"/your-direcory-path/"):
open(filename.encode(sys.getfilesystemencoding()), "r")