使用Python查找形状文件属性字段中的空值
我有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
我不能准确回答你的问题,但也许这个方法对你有帮助:
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()
1
我本来想把这个作为评论加到你的问题下面,但我不能。首先,如果你想检查某个字段是否为空,请把这一行:
if row[0] == ["", " ", None]:
改成:
if row[0] in ["", " ", None]:
不过,这其实是个逻辑错误,不应该导致运行时错误。请确保最后一行的“print 'OK'”的缩进是正确的。
运行下面的代码,看看运行时错误是否还存在。如果还有,请提供更多信息(包括错误的行号):
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"