Уведомления

Группа в Telegram: @pythonsu

#1 Июль 6, 2011 22:43:06

Александр Коробкин
От:
Зарегистрирован: 2011-07-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Русский язык в названии переменных

Доброго времени суток всем форумчанам!

Стараюсь избегать кирилицы в коде, но здесь не тот случай((

UC=gp.UpdateCursor(NP,“”,“”,“SOATO; Сельсовет”,“”)
UCi=UC.next()
while UCi:
UCi.Сельсовет = D[UCi.SOATO]
UC.UpdateRow(UCi)
UCi=UC.next()
Функций UpdateCursor помогает изменить значение ячейки в столбце таблицы. Столбец имеет русское название (в данном случае “Сельсовет”). Когда слово “Сельсовет” выступает аргументом в скобках, то проблем не возникает. Но когда оно же становится методом, то появляется ошибка: There's an error in your program: invalid syntax
Ошибка возникает только когда я загружаю в IDLE скрипт целиком. Когда я выполняю скрипт до этого блока, а зетем ввожу этот блок построчно в IDLE - он чудесным образом работает.

Как достичь автоматического выполнения данного блока? Прошу советов…



Офлайн

#2 Июль 6, 2011 23:45:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Русский язык в названии переменных

# encoding: <whatever>
в начале файла



Офлайн

#3 Июль 7, 2011 00:48:57

Александр Коробкин
От:
Зарегистрирован: 2011-07-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Русский язык в названии переменных

# encoding: <whatever>
Отлично! Из IDLE заработало как надо. СпасиБо!!!


1. Как сделать, чтобы скрипт работал через python.exe?
2. Где можно прочесть об этих командах в начале программы и о кодировании вообще?



Отредактировано (Июль 7, 2011 10:35:34)

Офлайн

#4 Июль 7, 2011 11:35:06

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Русский язык в названии переменных

Здравствуйте.
О кодировках есть чудесная статья http://www.py-my.ru/post/4bfb3c6a1d41c846bc00009b Ссылку нашел в одной из предыдущих тем.
Если я правильно понял суть первого вопроса - сохранять питоновские файлы с расширением pyw.

А что касается кирилицы в названиях переменных, имхо, я б не стал, вплоть до написания парсера с последующей транслитерацией.


Special cases aren't special enough to break the rules.

:)



Отредактировано (Июль 7, 2011 13:12:16)

Офлайн

#5 Июль 7, 2011 13:46:05

Александр Коробкин
От:
Зарегистрирован: 2011-07-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Русский язык в названии переменных

Yurietc
А что касается кирилицы в названиях переменных, имхо, я б не стал, вплоть до написания парсера с последующей транслитерацией.
Я уже говорил - это вынужденная мера. Названия столбцов таблицы на русском.

Yurietc
Если я правильно понял суть первого вопроса - сохранять питоновские файлы с расширением pyw.
Не понимаю зачем. Расширение не играет роли.

3. Почему из IDLE выполняется, а напрямую через python.exe прерывается на старте?
Видимо не происходит компиляция исходного текста в байт-код.



Офлайн

#6 Июль 7, 2011 15:48:10

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Русский язык в названии переменных

Александр Коробкин
Yurietc написал:

Если я правильно понял суть первого вопроса - сохранять питоновские файлы с расширением pyw.

Не понимаю зачем. Расширение не играет роли.
Я действительно неправильно понял вопрос. Теперь ясно.
Если через IDLE выполняется, значит все правильно написано. Я думаю проблема в кодировке. Как решить ? - долго и упорно копаться в вашей системе, а так не смогу ничего подсказать.

А почему не подходит решение написать парсер, который прочитает все названия на русском и заменит их на транслит ?



Офлайн

#7 Июль 7, 2011 16:40:11

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Русский язык в названии переменных

А вообще, если через 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)

Офлайн

#8 Июль 7, 2011 17:17:46

Александр Коробкин
От:
Зарегистрирован: 2011-07-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Русский язык в названии переменных

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()
Все заработало. Но другой раз можно такой функции и не найти.
Всем еще раз большое СПАСИБО!!!



Офлайн

#9 Июль 7, 2011 17:33:44

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Русский язык в названии переменных

ArcGIS? А попробуйте, кстати, такое работает? getattr(UCi, u“Сельсовет”) и setattr(UCi, u“Сельсовет”, u“Нижнерукский”)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#10 Июль 7, 2011 17:38:03

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Русский язык в названии переменных

setattr/getattr из двойки не заработают. А вот UCi.__dict__ = u'Нижнеруксуий' сделать можно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version