Ich versuche, eine Auswahl nach Attribut in Python zu vervollständigen, jedoch basierend auf der Abfrage, ob ein Attribut in einer Liste vorhanden ist.
Eine solche Abfrage sollte im einfachsten Fall ungefähr so lauten:
qry = " \"OBJECTID\" in oid_list"
arcpy.SelectLayersByAttribute_management(inft, "NEW_SELECTION", qry)
Dieser Ansatz gibt jedoch einen ungültigen Ausdrucksfehler zurück.
In der Vergangenheit musste ich für diese Art von Abfrage eine kompliziertere Systemsteuer verwenden, z. B .:
sqlQuery2 = "nid in (" + ','.join(["'"+x+"'" for x in delta_list]) +")"
aber eine adaption dieses schnipsel scheint auch bei mir nicht zu funktionieren, dh:
"OBJECTID_1 in (" + ','.join(["'"+str(x)+"'" for x in oid_list]) +")"
Was vermisse ich hier?
Hier ist eine leicht geänderte Version der Funktion in dieser Antwort , um eine Python-Liste anstelle eines durch Semikolons getrennten Strings zu akzeptieren:
quelle
Ich denke, der einfachste Weg, dies zu tun, besteht darin, die Werte in Ihrer Liste einzeln zu durchlaufen und zur Auswahl hinzuzufügen (Sie können also Ihre Abfrage mit jedem Wert in der Liste ändern). Etwas wie das:
Sie können ADD_TO_SELECTION verwenden, auch wenn keine Features ausgewählt sind. Bei der ersten Iteration wird eine neue Auswahl erstellt.
Bearbeiten:
Wenn Sie der Meinung sind, dass die Kosten für die Ausführung einzelner SelectLayerByAttribute-Befehle zu hoch sind, können Sie einen Ansatz wie diesen verwenden, bei dem Sie abhängig von Ihrer Listenlänge eine recht umfangreiche Auswahlklausel erstellen:
quelle