Обработка ascii char в строке python - PullRequest
0 голосов
/ 22 сентября 2011

у меня есть файл с именем "SSE-Künden, SSE-Händler.pdf", в котором есть эти два unicode char ( ü,ä), когда я печатаю это имя файла на интерпретаторе python, значения Юникода преобразуются в соответствующие значения ascii, я думаю, 'SSE-K\x81nden, SSE-H\x84ndler.pdf', но я хочу

test dir содержит pdf-файл с именем «SSE-Künden, SSE-Händler.pdf»

я попробовал это: путь = 'C: \ test' для a, b, c в os.walk (путь): печать c

['SSE-K\x81nden, SSE-H\x84ndler.pdf']

как мне преобразовать эти символы ascii в соответствующие значения Юникода, и я хочу показать оригинальное имя ("SSE-Künden, SSE-Händler.pdf") в интерпретаторе, а также записать в какой-то файл как есть. Как мне этого добиться. Я использую Python 2.6 и ОС Windows.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 22 сентября 2011

Предполагая, что ваш терминал поддерживает отображение символов, переберите список файлов и распечатайте их по отдельности (или используйте Python 3, который отображает Unicode в списках):

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> for p,d,f in os.walk(u'.'):
...  for n in f:
...   print n
...
SSE-Künden, SSE-Händler.pdf

Также обратите внимание, что я использовал строку Unicode(U '.') для пути.Это инструктирует os.walk возвращать строки Unicode, а не строки байтов.При работе с именами файлов, не относящимися к ASCII, это хорошая идея.

В Python 3 строки по умолчанию имеют Unicode, а символы, не входящие в ASCII, отображаются пользователю вместо отображаемых в качестве escape-кодов:

Python 3.2.1 (default, Jul 10 2011, 21:51:15) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> for p,d,f in os.walk('.'):
...  print(f)
...
['SSE-Künden, SSE-Händler.pdf']
1 голос
/ 22 сентября 2011
for a,b,c in os.walk(path):
    for n in c:
        print n.decode('utf-8')
0 голосов
/ 22 сентября 2011
...