Calculate Text Field

0 голосов
спросил 27 Июнь, 12 от SV_P (9,350 баллов) в категории Программные продукты Esri
Кто в курсе, как на питоне записать данные в текстовое поле?
Взял из примера скрипт, сделал 2 одинаковых кода - числовой и текстовый.
Числа вносятся нормально, а текст нет. Причем, программа работает, доходит до конца, как-будто все нормально. Уже всякие кавычки перепробовал.
if field.Name == "PAPKA":
            print u"Работаю в поле"+"  "+field.Name
            val = 'TEXT' - (или "TEXT" без разницы)
            gp.CalculateField(infiles, "PAPKA", val) - или ,"PYTHON_9.3") без разницы
        if field.Name == "ID":
            print u"Работаю в поле"+"  "+field.Name
            # Set the value for the field and exit loop
            gp.CalculateField(infiles, "ID", 15) #числа пишет хорошо.
            break
print "Вам повезло. Работа завершена."
Оказывается она в поле PAPKA вообще не заходит, хотя название скопировано из базы. Замены кирилицей нет.

Паралельно еще вопрос. В хэлпе сказано, что у списка есть счетчик количества (Count) и это естественно.
fcs = gp.listfeatureclasses()
print fcs.Count
Однако при выполнении прога пишет, что
AttributeError: 'list' object has no attribute 'Count' - странно.

5 Ответы

0 голосов
ответил 27 Июнь, 12 от SV_P (9,350 баллов)
удалил break (он был в примере). начало заходить в оба поля, но в базу все равно не пишет.

0 голосов
ответил 27 Июнь, 12 от doujin (2,960 баллов)
По умолчанию в 9.3 CalculateField_management использует VB формат выражения для вычисления. В VB формате строка должна быть заключена в кавычки (""), то есть в вашем случае вы должны передавать строку "TEXT", а передаете просто TEXT.

if field.Name == "PAPKA":
    print "Работаю в поле ", field.Name
    val = '"TEXT"' #Одинарные кавычки от python, двойные для VB
    gp.CalculateField_management(infiles, "PAPKA", val)


Количество фиче классов можно посчитать так:

fcs = gp.listfeatureclasses()
print len(fcs)

    
0 голосов
ответил 27 Июнь, 12 от SV_P (9,350 баллов)
Ишь, ты! Хитро. Заработало. Спасибо.
Осталось только сообразить, как приделать одинарные кавычки к двойным, если val получается программно?
+1 голос
ответил 27 Июнь, 12 от doujin (2,960 баллов)
Нужно просто добавить к программно полученной строке двойные кавычки в начале и в конце. Что-то вроде:

val = '"' + val_from_program + '"'

Как я уже писал, в val нужно передать не просто текст значения поля, а "текст значения поля".
0 голосов
ответил 27 Июнь, 12 от SV_P (9,350 баллов)
Ну, вот, заработало!А у меня мозги ровно наоборот работают. Я-то пытаюсь к этой строке одинарные кавычки приспособить, как в первом случае  :-)
Спасибо.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...