Как я могу пройти по каталогам с именами на японском языке в Python? - PullRequest
5 голосов
/ 14 июля 2011

Я пытаюсь создать простую вспомогательную утилиту, которая будет просматривать мои проекты, находить и возвращать открытые мне через командную строку. Но мои вызовы os.listdir возвращают тарабарщину (пример: '\x82\xa9\x82\xcc\x96I') всякий раз, когда папка или имя файла на японском языке, и говорят, что тарабарщина не может быть снова передана на вызов, чтобы попасть в папку. то есть os.listdir('C:\Documents and Settings\\x82\xa9\x82\xcc\x96I') возвращает ошибку:

'WindowsError: [Error 3] 指定されたパスが見つかりません。'

Кто-нибудь знает, как я могу обойти это? Большое спасибо.

Ответы [ 2 ]

6 голосов
/ 14 июля 2011

Возможно, вам потребуется декодировать строку в Unicode, а затем перекодировать ее в UTF-8, прежде чем передать ее в os.listdir.Похоже, что ваша японская строка закодирована в shift-JIS:

>>> '\x82\xa9\x82\xcc\x96I'.decode('shift-jis').encode('utf-8')
'\xe3\x81\x8b\xe3\x81\xae\xe8\x9c\x82'
>>> print '\x82\xa9\x82\xcc\x96I'.decode('shift-jis')
かの蜂

В качестве альтернативы, используйте следующую функцию os.listdir, чтобы получить строки Unicode из нее в первомplace:

В Windows NT / 2k / XP и Unix, если path - это объект Unicode, результатом будет список объектов Unicode.Не декодируемые имена файлов будут по-прежнему возвращаться как строковые объекты.

Итак:

os.listdir(ur'C:\Documents and Settings')
# ---------^
2 голосов
/ 14 июля 2011

Вы должны попытаться передать имя каталога как Unicode-literal (u'your/path'). Таким образом, результатом также является Unicode (который, вероятно, требуется для работы с японскими символами).

Из документации :

В Windows NT / 2k / XP и Unix, если путь является объектом Unicode, результат будет список объектов Unicode. Не декодируемые имена файлов по-прежнему будут возвращается как строковые объекты.

...