Форум сайта python.su
Доброго времени суток всем форумчанам!
Стараюсь избегать кирилицы в коде, но здесь не тот случай((
UC=gp.UpdateCursor(NP,“”,“”,“SOATO; Сельсовет”,“”)Функций UpdateCursor помогает изменить значение ячейки в столбце таблицы. Столбец имеет русское название (в данном случае “Сельсовет”). Когда слово “Сельсовет” выступает аргументом в скобках, то проблем не возникает. Но когда оно же становится методом, то появляется ошибка: There's an error in your program: invalid syntax
UCi=UC.next()
while UCi:
UCi.Сельсовет = D[UCi.SOATO]
UC.UpdateRow(UCi)
UCi=UC.next()
Офлайн
# encoding: <whatever>
в начале файла
Офлайн
# encoding: <whatever>
Отлично! Из IDLE заработало как надо. СпасиБо!!!
1. Как сделать, чтобы скрипт работал через python.exe?
2. Где можно прочесть об этих командах в начале программы и о кодировании вообще?
Отредактировано (Июль 7, 2011 10:35:34)
Офлайн
Здравствуйте.
О кодировках есть чудесная статья http://www.py-my.ru/post/4bfb3c6a1d41c846bc00009b Ссылку нашел в одной из предыдущих тем.
Если я правильно понял суть первого вопроса - сохранять питоновские файлы с расширением pyw.
А что касается кирилицы в названиях переменных, имхо, я б не стал, вплоть до написания парсера с последующей транслитерацией.
…
Special cases aren't special enough to break the rules.
…
:)
Отредактировано (Июль 7, 2011 13:12:16)
Офлайн
YurietcЯ уже говорил - это вынужденная мера. Названия столбцов таблицы на русском.
А что касается кирилицы в названиях переменных, имхо, я б не стал, вплоть до написания парсера с последующей транслитерацией.
YurietcНе понимаю зачем. Расширение не играет роли.
Если я правильно понял суть первого вопроса - сохранять питоновские файлы с расширением pyw.
Офлайн
Александр КоробкинЯ действительно неправильно понял вопрос. Теперь ясно.
Yurietc написал:
Если я правильно понял суть первого вопроса - сохранять питоновские файлы с расширением pyw.
Не понимаю зачем. Расширение не играет роли.
Офлайн
А вообще, если через IDLE запускается, то скорее всего, файл (или отдельные строки/символы) в одной кодировке, а в #-*-encoding:UTF-8-*- прописана другая.
Я бы сделал так:
#-*-encoding:UTF-8-*-
DB_ENC = u"UTF-8" #Кодировка базы
UC=gp.UpdateCursor(NP,"","",u"SOATO; Сельсовет".encode(DB_ENC),"")
UCi=UC.next()
while UCi:
# UCi.Сельсовет = D[UCi.SOATO[4:6]]
setattr(UCim, u"Сельсовет".encode(DB_ENC), D[UCi.SOATO[4:6]])
UC.UpdateRow(UCi)
UCi=UC.next()
Отредактировано (Июль 7, 2011 16:41:41)
Офлайн
Yurietc, diam123 благодарю за участие! Все взял на заметку - буду разбираться
Тем временем, я нашел функцию, которая делает тоже самое действие, но название поля стало аттрибутом
UCi.Сельсовет = D[UCi.SOATO[4:6]]
UC=gp.UpdateCursor(NP,"","","SOATO; Сельсовет","")
UCi=UC.next()
while UCi:
UCi.SetValue("Сельсовет",D[UCi.SOATO[4:6]])
UC.UpdateRow(UCi)
UCi=UC.next()
Офлайн
ArcGIS? А попробуйте, кстати, такое работает? getattr(UCi, u“Сельсовет”) и setattr(UCi, u“Сельсовет”, u“Нижнерукский”)
Офлайн
setattr/getattr из двойки не заработают. А вот UCi.__dict__ = u'Нижнеруксуий' сделать можно.
Офлайн