Мне нужно получить дерево каталогов в юникоде. Делаю так:
#!/usr/bin/python2
import os
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('path', type=unicode)
args = parser.parse_args()
for (dir, subsdirs, files) in os.walk(args.path):
for file in files:
filename = os.path.join(dir, file)
И это не работает, если аргумент path содержит юникодные символы, ругается на invalid unicode value. При этом, если в дереве каталогов есть файлы с именами, содержащими юникод, то всё Ok, проблема только с тем, что передаётся в качестве аргумента. Почему так?
Не, там не надо ничего никуда encode, там юникод сразу и так. Я сначала свой скрипт на тройке наваял, и там всё работало отлично. Правда, потом оказалось, что либа для работы с тегами, которую я заюзал, хоть и удобная, но местами фейлится. Пришлось переписывать с мутагеном, и, соответственно, править под двойку.
Очень странно. Попробовал твой скрипт запустить. И он у меня ошибок не выдаёт. (Fedora19, python 2.7.5). Можешь написать на каких именах файлов у тебя ругань происходила?
$ cat ./u.py
#!/usr/bin/python2
import os
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('path')
args = parser.parse_args()
for (dir, subsdirs, files) in os.walk(args.path):
for file in files:
filename = os.path.join(dir, file)
print filename
print '-'*40
for x in os.walk(args.path):
print x
Я даже уже успел забыть когда скрипт себе копировал, что чем то мне этот параметр не понравился и я его удалил. И скрипт сразу тестировал уже без него.