Ich habe eine Reihe von Spalten in einer Reihe von Tabellen innerhalb einer REA, in denen ich die eindeutigen Werte für jede Spalte extrahieren muss.
Zum Beispiel: Die Werte können [1,2,2,2,3,4] sein, und ich versuche, [1,2,3,4] zurückzugeben.
Ich könnte diesen Job in ARCGIS auf verschiedene andere Arten erledigen, aber ich versuche mich zu erweitern.
Ich habe ein Stück Python im Web gefunden, von dem ich denke, dass es den Job erledigen wird, aber ich habe Probleme, es zum Laufen zu bringen (ich bekomme immer wieder einen ungültigen Syntaxfehler, da ich immer wieder den Syntaxfehler in Zeile 3 bekomme). Dies wird zweifellos sein Ein wirklich einfacher Benutzerfehler.
Code-Snippet unten
import arcpy
def unique_values(r'N:\GISProjects\Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj'):
with arcpy.da.SearchCursor(table, [field]) as cursor:
return sorted({row[0] for row in cursor})
Dies ist die Fehlermeldung, die ich aus erhabenem Text erhalte:
File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 3
def unique_values(r'N:\GISProjects\Steve_Eastwood_Landuse\Plant_Biosecurity_Project\ArcGIS_Online.gdb\Holdings_Property_Merge' , 'LU_ALUMMaj'):
^
SyntaxError: invalid syntax
[Finished in 0.1s with exit code 1]
Aktualisierungen von der ursprünglichen Frage
Ich habe jetzt meinen Code mit der unten angegebenen Antwort aktualisiert, erhalte jedoch einen sekundären Fehler.
Neues Code-Snippet:
import arcpy
def unique_values(table , field):
with arcpy.da.SearchCursor(table, [field]) as cursor:
return sorted({row[0] for row in cursor})
myValues = unique_values(r'N:\\GISProjects\\Landuse\\Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge' , 'LU_ALUMMaj')
print (myValues)
Ich erhalte eine neue Fehlermeldung im Zusammenhang mit einem Laufzeitfehler
Traceback (most recent call last):
File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 7, in <module>
myValues = unique_values(r'N:\\GISProjects\\Steve_Eastwood_Landuse \Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge' , 'LU_ALUMMaj')
File "C:\Users\hawkinle\Desktop\STDTAS\Unique_Data.py", line 4, in unique_values
with arcpy.da.SearchCursor(table, [field]) as cursor:
RuntimeError: cannot open 'N:\\GISProjects\\Steve_Eastwood_Landuse\\Plant_Biosecurity_Project\\ArcGIS_Online.gdb\\Holdings_Property_Merge'
[Fertig in 8.0s mit Exit Code 1]
Ich gehe davon aus, dass dies mit dem Festlegen des env.workspace zusammenhängt.
quelle
env.workspace
ich nicht glaube. Versuchen Sie entweder dasr
vor dem Pfad abzunehmen oder das\` to
`im Pfad zu ändern (und lassen Sie dasr
dort). Existiert diese Geodatabase?[1,2,2,2,3,4]
, versuchen Sie zurückzukehren[1,2,3,4]
. Bitte aktualisieren Sie den Beitrag, um diese Informationen aufzunehmen.Antworten:
Sie haben es so ziemlich verstanden, Sie müssen nur den Namen Ihrer Parameter
table
undfield
in Ihrer Funktionsdefinition angeben und diese Werte dann übergeben, wenn Sie die Funktion aufrufen. Achten Sie auch auf Ihre Einrückung, da dies für Python von entscheidender Bedeutung ist.Grundsätzlich bedeutet dies, dass Sie beim Aufrufen der Funktion
unique_values()
Werte an zwei Parameter übergeben, einen aufgerufenentable
und einen aufgerufenenfield
. Diese werden dann in Ihrer Funktion verwendet. Wenn Sie die Funktion aufrufen, in der ZeileSie übergeben die Werte an diese Parameter.
Dies entspricht dem separaten Deklarieren Ihrer Parameter und dem direkten Übergeben an den Cursor:
quelle
set(['a', 'b', 'a', 'b'])
werden eindeutige Werte zurückgegeben{'a', 'b'}
. Wenn Siesorted()
just verwenden, werden sie in sortierter Reihenfolge zurückgegeben, da ein einfacher Satz unsortiert ist.Ich würde empfehlen, die integrierte
set()
Funktion von Python zusammen mit einemSearchCursor
als Generatorausdruck zu verwenden, um die eindeutigen Werte zu finden. Sie finden diesen Ansatz bei großen oder kleinen Datensätzen äußerst effizient:quelle
Der folgende Ansatz wurde unter https://arcpy.wordpress.com/2012/02/01/create-a-list-of-unique-field-values/ veröffentlicht. Er verwendet arcpy und numpy und hat einen geringeren Speicherbedarf als der SearchCursor-Ansatz.
quelle
Ich weiß, dass es eine alte Frage ist, aber ich werde dies hier jedem überlassen, der auf der Suche nach Hilfe über diese Frage stolpert. Durch die
arcpy.Frequency_analysis()
schnelle Verwendung werden alle eindeutigen Werte aus einem Feld in eine neue Tabelle eingefügt, die Sie dann für Cursoroperationen verwenden können. Ein einziger Befehl, um das zu tun, was all diese anderen Lösungen tun, und zwar schneller und einfacher. Als Bonus erhalten Sie auch eine Zählung, wie oft jeder Wert angezeigt wird.quelle