Cover Story
Май 21, 2011 16:05:20
Всем доброго!
Не могу понять как записать путь в конфиг котором содержаться русские буквы?
#-*- coding:utf-8 -*-
import ConfigParser
import codecs
config = ConfigParser.RawConfigParser()#Подключаем ini-файл
config.readfp(codecs.open('invdrv.ini', 'r', 'cp1251'))#Задаем имя ini-файла
config.set('path', 'inpath', 'C:\Статьи Затрат ноябрь\затраты по автомашинам\затраты по машинам568.pdf'.encode('cp1251'))
fff = open('invdrv.ini', 'w')
config.write(fff)
fff.close()
Подскажите пожалуйста.
doza_and
Май 21, 2011 18:01:27
config.set('path', 'inpath', u'машинам568.pdf'.encode('cp1251'))
with open("out.dat","wb") as fff:
config.write(fff)А вообще - совет - не баловать пользователей. Пути с пробелами и буквами отличными от английских запретить. Сам всегда так делаю. В мануалах пишу софт не поддерживает и все тут. Избавляет от огромного числа проблем. Пользователи ведь и сами путают кодировки когда пишут конфиги а потом претензии почему путь не находится. Сторонний софт опирается на то, что в путях нет пробелов и прочее прочее прочее прочее …
Cover Story
Май 23, 2011 15:44:54
Спасибо, но так то же появляются ошибки, по крайней мере у меня не получилось.
Подобрал модуль configobj с ним вроде бы все пучком.
Андрей Светлов
Май 23, 2011 19:29:11
Если делаете ‘utf-8 c русскими буквами’.encode(cp1251') — будет мусор.
Нужно uft8 -> unicode -> cp1251.
doza_and правильно показал на ошибку — только не подчеркнул, где она.
Cover Story
Май 24, 2011 14:33:15
Вы наверно имеете ввиду этот фрагмент:
u'машинам568.pdf'.encode('cp1251')Буковка
u, в своем скрипте я ее ставил. С отдельным именем файла он работает, но когда пишешь полный путь ругается. Ему не нравятся слеши.
Андрей Светлов
Май 24, 2011 21:00:55
ur'путь\к\файлу'
Не забывайте про экранирование. Или двойные слеши ставьте.
Cover Story
Май 25, 2011 06:58:47
Извиняюсь, как же я забыл.
Ну а если мой путь я беру с переменной
например так:
path = ‘C:\Статьи Затрат ноябрь\затраты по автомашинам\затраты по машинам568.pdf’
И path у меня используется в различных ситуациях. Тут как быть?
doza_and
Май 25, 2011 08:10:16
У вас переменная не соответствует реальному пути. Сделайте ей print и увидите.
Рекомендую
path = u'C: /Статьи Затрат ноябрь/затраты по автомашинам/затраты по машинам568.pdf'
для большинства нормальных приложений это пройдет и под виндами
иначе
path = ur'C: /Статьи Затрат ноябрь/затраты по автомашинам/затраты по машинам568.pdf'
Cover Story
Май 25, 2011 12:23:18
А в QLineEdit выводить допустим в том Qt тоже с ur писать? Это как то не очень красиво.
doza_and
Май 25, 2011 13:30:46
ur“ ” это правила языка питон для литералов (способ забить строку именно такую как вы хотите) они достаточно красивые по моему мнению. Почитайте про литералы. Важно чтобы содержание строки было правильной юникодной строкой, а как вы этого добиваетесь неважно. Если хочется можно и bytearray набить этими данными. Про Qt ничего не скажу - там ведь наверное QString и в отличии от wx Наверное надо будет конвертить.