Изменение списка полей с помощью arcpy.da.UpdateCursor - PullRequest
0 голосов
/ 15 мая 2018

У меня есть список полей из набора данных, которые являются полями строкового типа. Мне нужно удалить пустые места из всех строк в этих полях.

Мой код:

import arcpy
dataset = r'Database Connections\xxxx.sde\GISUSA.PET_Wells'
fields = arcpy.ListFields(dataset)
for field in fields:
    if field.type =="String":
       list_of_fields.append(field.name)
for i in list_of_fields:
    with arcpy.da.UpdateCursor(dataset, "{}".format(i)) as cursor:
        for row in cursor:
            row[0]=row[0].strip()
            cursor.updateRow(row)

Я получаю сообщение об ошибке:

Ошибка выполнения Traceback (последний вызов был последним): файл "", строка 4 в AttributeError: объект 'NoneType' не имеет атрибута 'Полоса'

Я угадываю значение i в строке

with arcpy.da.UpdateCursor(dataset, "{}".format(i)) as cursor:

не в правильном формате.

Я протестировал другое форматирование, '"{}". Format (i). Он также имеет ошибку при установке внутри UpdateCursor.

Этот код печатает правильно отформатированные значения с двойными кавычками, которые требуются для полей внутри UpdateCursor

>>> for i in list_of_fields:
...     print '"{}"'.format(i)

... "WELL_UWI" "WELL_NAME" "ELEV_TYPE" "CURRENT_STATUS" "SPUD_DATE" "COMPLETION" "FIELD" "WL_COUNTY" "WL_STATE" "DRILLING_OPERATOR" "CURRENT_WELL_LEASE_NAME" "ЗАМЕЧАНИЕ"

for i in list_of_fields:
...     with arcpy.da.UpdateCursor(dataset, '"{}"'.format(i)) as cursor:
...         for row in cursor:
...             row[0]=row[0].strip()
...             cursor.updateRow(row)

Ошибка выполнения Traceback (последний вызов был последним): файл "", строка 10, в RuntimeError: не удается найти поле '"WELL_UWI"'

Есть мысли?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

После некоторого следа и ошибки это сработало:

for i in list_of_fields:
     with arcpy.da.UpdateCursor(dataset, i) as cursor:
         for row in cursor:
            row[0]=str(row[0]).strip()
            cursor.updateRow(row)
0 голосов
/ 15 мая 2018

Значения в list_of_fields уже являются строками, UpdateCursor принимает либо список полей, либо строку с именем поля.Нет необходимости выполнять какое-либо форматирование значений.

просто сделайте:

for i in list_of_fields:
    with arcpy.da.UpdateCursor(dataset, i) as cursor:
        for row in cursor:
            row[0]=row[0].strip()
            cursor.updateRow(row)

Также вы пытаетесь избавиться от всех пустых мест или только в начале и конце строки?Если вы хотите избавиться от всех пробелов, вы должны использовать string.replace(' ','')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...