Поиск полей атрибута файла формы формы с нулевым значением, используя python - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть 100 файлов форм из разных подпапок. Я хочу проверить поле «Население» в каждом файле формы. Если поле «Население» в каком-либо файле формы имеет значение [»,« », None], напечатайте мне имя этих конкретных файлов формы.

import os  
import fnmatch  
import arcpy  
rootPath = r"C:\Project\layers"   
pattern = 'mig*.shp'   
for root, dirs, files in os.walk(rootPath):   
    for filename in fnmatch.filter(files, pattern):   
        shp = os.path.join(root, filename)  
        if arcpy.ListFields(shp, "Population"):  
            print("{} has Population field".format(shp))   
            with arcpy.da.SearchCursor(shp, ["Population"]) as rows:  
                for row in rows:  
                    if row[0] == ["", " ", None]:  
                        print("{} has a empty value".format(shp))
                    else:
                            print "OK"

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

Я получаю «ошибку времени выполнения». Ошибка типа: строковые индексы должны быть целыми числами, а не стр.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

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

if row[0] == ["", " ", None]:

на:

if row[0] in ["", " ", None]:

Но это логическая ошибка, которая не должна приводить к времени выполнения ошибка. Также убедитесь, что отступ в строке «ОК» в последней строке правильный.

Запустите приведенный ниже код и сообщите нам, если ошибка времени выполнения все еще присутствует. Если да, пожалуйста, предоставьте дополнительную информацию (включая строку с ошибкой):

import os  
import fnmatch  
import arcpy  
rootPath = r"C:\Project\layers"   
pattern = 'mig*.shp'   
for root, dirs, files in os.walk(rootPath):   
    for filename in fnmatch.filter(files, pattern):   
        shp = os.path.join(root, filename)  
        if arcpy.ListFields(shp, "Population"):  
            print("{} has Population field".format(shp))   
            with arcpy.da.SearchCursor(shp, ["Population"]) as rows:  
                for row in rows:  
                    if row[0] in ["", " ", None]:  
                        print("{} has a empty value".format(shp))
                    else:
                        print "OK"


0 голосов
/ 05 апреля 2020

Я не могу точно ответить на ваш вопрос, но, возможно, вам поможет такой подход:

import arcgisscripting
gp = arcgisscripting.create(9.3)
...
rows = gp.SearchCursor(shp)
row = rows.Next()
while row:
    population = row.GetValue("Population")
    # ... perform check ...
    row = rows.next()
...