0

Подскажите, пожалуйста, почему в нижеприведенном коде результаты внутри цикла возвращаются кириллицей, а за циклом уже в другой кодировке?

# -*- coding: utf-8 -*-
import os
path_f = []
for d, dirs, files in os.walk(u'd:\удалить'):
    for f in files:
        path = os.path.join(d,f)
        path_f.append(path)
        print(path)
print(path_f)`  

результат

d:\удалить\реестр1.xlsx  
d:\удалить\реестр2.xlsx

[u'd:\\\u0443\u0434\u0430\u043b\u0438\u0442\u044c\\\u0440\u0435\u0435\u0441\u0442\u04401.xlsx',      u'd:\\\u0443\u0434\u0430\u043b\u0438\u0442\u044c\\\u0440\u0435\u0435\u0441\u0442\u04402.xlsx']
jfs
  • 52,361

1 Answers1

3

Потому что path - строка и выводится как строка, а path_f - список, при попытке распечатать его происходит сериализация и на вывод попадает "как бы бинарная" форма. Если хотите вывести весь список как набор строк, нужно сделать явное его преобразование в строку. Например вот так:

print('[%s]' % ','.join(path_f))

В этом случае вывод будет такой же, как у Вас (как бы дамп списка), но строки будут читаемыми.

Safir
  • 56
  • а если я хочу записать результат в файл? почему при str(('[%s]' % ','.join(path_f)))) выдается 'ascii' codec can't encode characters in position 4-8: ordinal not in range(128)? – Александр Кудрявцев Jan 24 '17 at 10:32
  • «"как бы бинарная" форма»--для ясности это не бинарная форма--это текстовое представление списка (как его можно было бы в исходном коде задать в виде константы). – jfs Jan 24 '17 at 19:06
  • @Александр Кудрявцев, а вот тут мы утыкаемся сразу в две проблемы.Проблема номер раз: видимо, Вы используете старую версию интерпретатора, а все 2.x уже довольно давно старые. Если Вы работаете с новым проектом, используйте третью ветку. Вторая - чисто для поддержки уже написанных и работающих. – Safir Jan 25 '17 at 11:13
  • @АлександрКудрявцев потому что не следует вызывать str(u'ф') ни на какой версии Питона (либо ошибка, либо не нужно). Если не знаете как сохранить unicode в файл, задайте отдельный вопрос. См. Корректный принт в файл русских символов python 2. Прочтите ответ – jfs Jan 25 '17 at 13:39