使用按属性

时间:2017-03-19 20:26:39

标签: arcpy

我有一个包含许多字段的县的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")

1 个答案:

答案 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")