2016-08-19 3 views
-1

Donc, pour mon exemple, j'ai un grand shapefile des parcs d'État où certains d'entre eux sont des parcs réels et d'autres sont tout simplement des sentiers. Cependant, il n'y a pas de colonne définissant quels sont les sentiers par rapport aux parcs actuels, et je voudrais sélectionner ceux qui sont des sentiers et les supprimer. J'ai une colonne pour le nom de chaque fonctionnalité, qui contient généralement le mot "trail" quelque part dans la chaîne. Cependant, ce n'est pas toujours au début ou à la fin.arcpy, sélectionnez fonctionnalités basées sur une partie d'une chaîne

Je ne suis familier avec Python à un niveau de base et alors que je pouvais passer par sélectionner manuellement ceux que je veux, je suis curieux de voir si elle pourrait être automatisée. J'ai utilisé arcpy.Select_analysis et essayé d'utiliser "LIKE" dans ma where_clause et j'ai vu des exemples en utilisant le découpage en tranches, mais je n'ai pas réussi à obtenir une solution de travail. J'ai aussi essayé d'utiliser la fonction 'is in' mais je ne suis pas sûr de l'utiliser correctement avec la clause where_clause. Je pourrais ne pas avoir une assez bonne compréhension des termes appropriés à utiliser lors de la recherche et de la recherche. Toute aide est appréciée. J'ai utilisé la fenêtre Python dans ArcMap 10.3.

Actuellement, je suis à:

arcpy.Select_analysis ("stateparks", "notrails", '' piste 'est dans \ "SITE_NAME \"')

Répondre

0

Bien que l'aide de l'outil de sélection est un bon choix, la syntaxe de l'expression SQL peut être un défi. Envisagez d'utiliser un Update Cursor pour résoudre ce problème.

import arcpy 

stateparks = r"C:\path\to\your\shapefile.shp" 
notrails = r"C:\path\to\your\shapefile_without_trails.shp" 

# Make a copy of your shapefile 
arcpy.CopyFeatures_management(stateparks, notrails) 

# Check if "trail" exists in the string--delete row if so 
with arcpy.da.UpdateCursor(notrails, "SITE_NAME") as cursor: 
    for row in cursor: 
     if "trails" in row[0]: # row[0] refers to the current row in the "SITE_NAME" field 
      cursor.deleteRow() # Delete the row if condition is true 
+0

Désolé, mais cela a fait l'affaire! Je vous remercie! Au début, aucune des lignes n'étaient supprimées, jusqu'à ce que je réalise que la chaîne de recherche était sensible à la casse. Doh! Merci encore pour votre temps! – Koelker12