[Python] join и помирающая кодировка
От: ShaggyOwl Россия http://www.rsdn.org
Дата: 14.04.10 13:01
Оценка:
День добрый!

Есть крохотный кусочек кода (см ниже).
Его запуск показывает, что path.join() по тихому меняет кодировку.
Вопросы. Зачем меняется кодировка? Какая кодировка используется join-ом?
И до кучи. Куда и почему пропала sys.setdefaultencoding?
Ссылки на матчасть приветствуются.

Спасибо.

def visit(arg, dirname, names):
    for n in names:
        print dirname.join(n)

if __name__ == "__main__":
    os.path.walk(".", visit, 0)
Хорошо там, где мы есть! :)
python path join encoding
Re: [Python] join и помирающая кодировка
От: strannik747  
Дата: 14.04.10 13:24
Оценка: 16 (1)
Здравствуйте, ShaggyOwl, Вы писали:

SO>Есть крохотный кусочек кода (см ниже).

SO>Его запуск показывает, что path.join() по тихому меняет кодировку.

1. А как Вы определили, что меняется кодировка? Я запускал под фрагмент windows, все имена файлов в кодировке OEM (866).

2. В приведённом фрагменте у Вас работает string.join(), а не os.path.join(), для вызова последней надо так:

def visit(arg, dirname, names):
    for n in names:
        print os.path.join(dirname, n)
Re[2]: [Python] join и помирающая кодировка
От: ShaggyOwl Россия http://www.rsdn.org
Дата: 14.04.10 14:22
Оценка:
Здравствуйте, strannik747, Вы писали:

S>2. В приведённом фрагменте у Вас работает string.join(), а не os.path.join(), для вызова последней надо так:


S>
S>def visit(arg, dirname, names):
S>    for n in names:
S>        print os.path.join(dirname, n)
S>


Точно, вызывался string.join, а т.к. директории имели незамысловатые имена "1", "2", ..., "50" то результат был похож на поломанную кодировку.

Из документации неочевидно (для новичка), что будут передаваться строки, а не os.path... (http://docs.python.org/library/os.path.html)

os.path.walk(path, visit, arg)

Calls the function visit with arguments (arg, dirname, names) for each directory in the directory tree rooted at path (including path itself, if it is a directory). The argument dirname specifies the visited directory, the argument names lists the files in the directory (gotten from os.listdir(dirname)). The visit function may modify names to influence the set of directories visited below dirname, e.g. to avoid visiting certain parts of the tree. (The object referred to by names must be modified in place, using del or slice assignment.)


Спасибо!
Хорошо там, где мы есть! :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.