Добавление нескольких имен полей в ArcGIS с использованием Python - PullRequest
0 голосов
/ 11 октября 2010

Мне было интересно, кто-нибудь там поможет мне с шагом в моем задании HW ...

Пока это моя программа на python, которая делает то, что должна.

# Import system modules
import sys, string, os, arcgisscripting

# Create the Geoprocessor object
gp = arcgisscripting.create()

# Load required toolboxes...
gp.AddToolbox("C:/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")

# Script argum ents...
Input_Table = sys.argv[1]
gp.addmessage("sys.argv[1] is " + Input_Table)

Field_Name = sys.argv[2]
gp.addmessage("sys.argv[2] is " + Field_Name)

# Local variables...
Output_Feature_Class = ""

# Process: Add Field...
gp.AddField_management(Input_Table,     Field_Name, "TEXT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

Моя задача - распаковать мой второй параметр (sys.argv [2]), разбить его на несколько элементов в списке и затем добавить в поле добавленный код для добавления значений нескольких полей.

Очевидно, что Python - это не мое.Я уверен, что это простая задача.

Большое спасибо!

Ответы [ 4 ]

0 голосов
/ 20 марта 2013

1) Вы можете пропустить итератор для нового массива с помощью: for item в new_fields:

, который установит для элемента новой переменной значение каждой части массива.

for item in new_fields:
    gp.AddField_management(Input_Table,item,"TEXT","","","","","NULLABLE","NON_REQUIRED","")

2) ваша ошибка в том, что вы разделяете объект массива.Сплит предназначен для работы на строковом объекте.Если бы вы имели:

new_fields = "DOM_CLASS,DOM_LIMIT,DOM_1,DOM_2"
Split_fields = new_fields.split(',')

Split_Fields бы тогда = ["DOM_CLASS", "DOM_LIMIT", "DOM_1", "DOM_2"]

0 голосов
/ 18 октября 2010

Используя конструктор моделей, я создал базовый скрипт для добавления полей в таблицу. Моя задача состоит в том, чтобы (1) иметь возможность добавить шесть полей в таблицу данных в Arc. (2) Записать результаты из набора данных в эту таблицу.

Благодаря тому, что я сделал, я могу добавить несколько полей в пустой шейп-файл, который я создал в Arc, но мне приходится каждый раз запускать скрипт и вручную вводить имя поля. (Это все работает в Arc, но я редактирую его в IDLE).

Приведенный выше скрипт - это то, что у меня изначально было. Я добавил список новых полей:

new_fields=['DOM_CLASS', 'DOM_LIMIT', 'DOM_VAL', 'SUB_CLASS', 'SUB_LIMIT', 'SUB_VAL']

Я добавил разделение в конец моего sys.argv [2]

 Field_Name = sys.argv[2].split(',')

здесь я получаю сообщение об ошибке

Я поместил последнюю строку скрипта в цикл

 for i in range (len(new_fields)):
     gp.AddField_management(Input_Table, Field_Name, "TEXT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

Итак, мне нужно «распаковать sys.argv [2] в несколько элементов в списке, а затем заключить код добавления поля в цикл, чтобы добавить значения нескольких полей».

Нужно ли учитывать диапазон в заголовках от 3 до 8.

Я часами читал (и пытался понять) всю онлайновую помощь по питону, которую смог найти. Я очень ценю вашу помощь.

0 голосов
/ 23 октября 2010

Во-первых, какое именно сообщение об ошибке вы получаете? И какой вклад вы даете своему скрипту (я хочу посмотреть, как вы запускаете скрипт python из командной строки, что-то вроде: 'python myFile.py arg1 arg2')?

Вам понадобится что-то вроде этого:

for i in range(len(new_fields)): 
     Field_Name = new_fields[i] 
     gp.AddField_management(Input_Table, Field_Name, "TEXT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

Дайте мне знать, если это решило вашу проблему.

0 голосов
/ 14 октября 2010

Чтобы разбить sys.argv [2] на список, разделенный любым символом, используйте этот формат: sys.argv[2].split(<character to split by>) где «символ для разделения на» может быть чем-то вроде «/», если вы хотите разделить косой чертой символ или "," если вы хотите разделить запятой. Попробуйте это в интерактивном режиме Python и протестируйте на какой-нибудь строке, которая будет введена для sys.argv [2]. Чтобы перебрать список, используйте: for i in range(len(<list name>)):, чтобы перебрать все элементы в списке, возвращенном функцией разделения, которую я вам показал. Я не хочу отдавать все, поэтому я оставлю вас там, и, надеюсь, вы можете выяснить все остальное! Удачи.

...