2016-08-19 3 views
-1

Also für mein Beispiel habe ich eine große Shapefile von State Parks, wo einige von ihnen sind tatsächliche Parks und andere sind nur Trails. Es gibt jedoch keine Spalte, die Trails oder tatsächliche Parks definiert, und ich möchte diejenigen auswählen, die Trails sind, und sie entfernen. Ich habe eine Spalte für den Namen jedes Features, das normalerweise das Wort "trail" irgendwo in der Zeichenfolge enthält. Es ist jedoch nicht immer am Anfang oder am Ende.Arcpy, wählen Sie Features basierend auf einem Teil einer Zeichenfolge

Ich bin nur vertraut mit Python auf einer grundlegenden Ebene und während ich gehen konnte durch manuelle Auswahl der, die ich will, war ich neugierig zu sehen, ob es automatisiert werden könnte. Ich habe arcpy.Select_analysis verwendet und versucht, "LIKE" in meiner where_clause zu verwenden. Ich habe Beispiele mit Slicing gesehen, konnte aber keine funktionierende Lösung finden. Ich habe auch versucht, die "ist in" -Funktion zu verwenden, aber ich bin mir nicht sicher, ob ich es richtig mit der where_clause verwende. Ich habe vielleicht einfach nicht genug Verständnis für die richtigen Begriffe, die man benutzen kann, wenn man fragt und sucht. Jede Hilfe wird geschätzt. Ich habe das Python-Fenster in ArcMap 10.3 verwendet.

Derzeit bin ich an:

arcpy.Select_analysis ("stateparks", "notrails", '' Spur 'ist in \ "SITE_NAME \"')

Antwort

0

Obwohl die Verwendung des Auswahlwerkzeugs eine gute Wahl ist, kann die Syntax für den SQL-Ausdruck eine Herausforderung darstellen. Erwägen Sie die Verwendung eines Update Cursor, um dieses Problem anzugehen.

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

Sorry so lange, aber das hat den Trick! Vielen Dank! Zuerst wurde keine der Zeilen gelöscht, bis ich erkannte, dass die Groß-/Kleinschreibung bei der Suche beachtet wurde. Do! Nochmals vielen Dank für Ihre Zeit! – Koelker12

Verwandte Themen