2017-03-19 2 views
0

J'ai un fichier de formes pour les comtés contenant de nombreux champs, parmi lesquels Pop_Descrp est l'un des champs. Je dois sélectionner les comtés avec l'attribut "Highly Increased" sous le champ et l'exporter. Je ne suis pas en mesure de faire une expression correcte pour la requête.Sélection de fichiers de formes spécifiques en utilisant la sélection de couche par attribut

Quelqu'un peut-il m'aider avec ceci?

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

Je pense que ce serait mieux recherché/demandé à l'échange de pile [gis.se]. – PolyGeo

Répondre

0

Vous avez utilisé les mauvais délimiteurs de champ pour votre type de données. Pour shapefiles vous devez utiliser de guillemets au lieu de crochets:

arcpy.SelectLayerByAttribute_management("County_Layer", "NEW_SELECTION", """"Pop_Descrp" = 'Highly Increased'""") 

Différents types de fichiers de données spatiales nécessitent différents délimiteurs de champ. Certains ont pas délimiteurs Pop_Descrp, certains exigent entre crochets [Pop_Descrp] et autres (y compris les fichiers de formes) nécessitent des guillemets doubles "Pop_Descrp"

Pour enregistrer conjecture sur laquelle délimiteurs à utiliser, la meilleure façon de gérer ces dernières est d'utiliser la fonction arcpy Add Field Delimitersarcpy.AddFieldDelimiters()

les délimiteurs de champ utilisé dans une expression SQL diffèrent en fonction du format des données interrogées. Par exemple, les géodatabases de fichier et les fichiers de formes utilisent des guillemets doubles (""), les géodatabases personnelles utilisent les crochets ([]) et les géodatabases d'entreprise n'utilisent pas les délimiteurs . La fonction peut enlever le travail de conjecture en s'assurant que les délimiteurs de champ utilisés avec votre expression SQL sont les correctes .

> # 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' 

Donc, pour faire votre travail de sélection, utilisez la fonction délimiteurs de champ Ajouter à insérer les délimiteurs appropriés pour votre domaine.

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