我有一个包含许多字段的县的shapefile,其中Pop_Descrp
是其中一个字段。我需要在字段下选择具有"Highly Increased"
属性的县并将其导出。我无法为查询创建正确的表达式。
任何人都可以帮我吗?
import arcpy
from arcpy import env
env.workspace=r"Z:\Ash Tree Project\Shapefiles_Arkansas"
env.OverwriteOutput=True
arcpy.MakeFeatureLayer_management("County_AR.shp","County_layer")
arcpy.SelectLayerByAttribute_management("County_layer", "NEW_SELECTION", "[Pop_Descrp]='Highly Increased'" )
arcpy.CopyFeatures_management("County_layer", "HighPopR_counties.shp")
答案 0 :(得分:0)
您为数据类型使用了错误的字段分隔符。对于shapefile,您需要使用双引号而不是方括号:
arcpy.SelectLayerByAttribute_management("County_Layer", "NEW_SELECTION", """"Pop_Descrp" = 'Highly Increased'""")
不同的空间文件类型需要不同的字段分隔符。有些没有分隔符Pop_Descrp
,有些需要方括号[Pop_Descrp]
,有些(包括shapefile)需要双引号"Pop_Descrp"
为了节省使用哪个分隔符的猜测,处理这些分隔符的最佳方法是使用arcpy函数Add Field Delimiters arcpy.AddFieldDelimiters()
SQL表达式中使用的字段分隔符因内容而异 查询数据的格式。例如,文件地理数据库和 shapefile使用双引号(“”),个人地理数据库使用 方括号([])和企业级地理数据库不使用字段 分隔符。该功能可以带走猜测工作以确保这一点 与SQL表达式一起使用的字段分隔符是正确的 的。
> # Shapefile:
> x = "{0} = 'Highly Increased'".format(arcpy.AddFieldDelimiters("County_AR.shp", "Pop_Descrp"))
> print x
"Pop_Descrp" = 'Highly Increased'
> # Personal Geodatabase:
> y = "{0} = 'Highly Increased'".format(arcpy.AddFieldDelimiters(r"myPGDB.mdb\County_AR", "Pop_Descrp"))
> print y
[Pop_Descrp] = 'Highly Increased'
> # Enterprise (SDE) Geodatabase:
> z = "{0} = 'Highly Increased'".format(arcpy.AddFieldDelimiters(r"EntGdb.sde\geodatabase.dbo.County_AR", "Pop_Descrp"))
> print z
Pop_Descrp = 'Highly Increased'
因此,要使您的选择工作,请使用“添加字段分隔符”功能为您的字段插入正确的分隔符。
import arcpy
arcpy.env.workspace = r"Z:\Ash Tree Project\Shapefiles_Arkansas"
arcpy.MakeFeatureLayer_management("County_AR.shp", "County_layer")
arcpy.SelectLayerByAttribute_management("County_layer", "NEW_SELECTION", "{0} = 'Highly Increased'".format(arcpy.AddFieldDelimiters("County_layer", "Pop_Descrp")) )
arcpy.CopyFeatures_management("County_layer", "HighPopR_counties.shp")