Форум сайта python.su
например такой скрипт:
#!/usr/bin/env python # -*- coding: utf_8 -*- import sys import glob path = sys.path print type(path[0]), path listfiles=glob.glob(ur"D:\Documents and Settings\Пользователь\Рабочий стол\*.txt") print type(listfiles[0]), listfiles raw_input()
listfiles=glob.glob(path[0]+ur"*.txt")
Офлайн
Lukehttp://docs.python.org/2/library/sys.html#sys.getfilesystemencoding
1 sys.path элементы имеют тип str, кодировка неизвестна в общем случае
Luke
4 как сделать чтоб sys.path элементы возвращались типа unicode?
some_path = unicode(sys.path[0], sys.getfilesystemencoding())
LukeПечатать Юникод. Но символы, которых нет в виндово-консольной кодировке cp866 не распечатаются все равно.
5 как все это читаемо вывести в консоль? угадывать кодировку для decode ?
Офлайн
Спасибо за ответ.
Судя по документации на винде файловые имена в юникоде, зачем их переводят в “mbcs” непонял.
some_path = unicode(sys.path[0], sys.getfilesystemencoding())
Отредактировано Luke (Ноя. 19, 2012 20:44:28)
Офлайн
LukeВроде только вручную:
работает, но это несколько не то чего я хотел, это кодирует один элемент списка. Можно ли заставить модуль sys.path сразу возвращать список в юникоде
encoding = sys.getfilesystemencoding() unipath = [unicode(x, encoding) for x in sys.path]
LukeМожно извратиться:
print нормально выводит отдельные юникод строки, а вот списки нет, это можно как то исправить ? или только в цикле поэлементно выводить?
lst = [u'Тест', u'Тест'] print lst print repr(lst).decode("unicode_escape") # [u'\u0422\u0435\u0441\u0442', u'\u0422\u0435\u0441\u0442'] # [u'Тест', u'Тест']
Офлайн
Печать списка именно для отладки.
Вообще пытаюсь выяснить нормальный способ работы над строчками в Python. Чтобы их можно было все однозначно обрабатывать, складывать, печатать (как английские) без постоянных траблов с кодировками. Думал обрабатывать всё в юникоде. Часто попадаются программы на python не способные работать при русских символах в путях (например имя пользователя, или рабочий стол)
Задача скрипта - обработать все файлы с изображениями из директории (и поддиректорий) в которой он находится. Папка, файлы естественно могут иметь имена на русском. Сразу напоролся на траблы с путями, но даже посмотреть их для отладки - проблема.
Офлайн
Lukeэти проблемы (неудобства) во втором питоне
Задача скрипта - обработать все файлы с изображениями из директории (и поддиректорий) в которой он находится. Папка, файлы естественно могут иметь имена на русском. Сразу напоролся на траблы с путями, но даже посмотреть их для отладки - проблема.
>>> import glob >>> glob.glob('*.txt') ['файл.txt'] >>>
Офлайн