Mam kilka kolumn w wielu tabelach w FGDB, w których muszę wyodrębnić unikalne wartości dla każdej kolumny.
Na przykład: wartości mogą wynosić [1,2,2,2,3,4], a ja próbuję zwrócić [1,2,3,4]
Mógłbym wykonać tę pracę na wiele innych sposobów w ARCGIS, ale staram się rozszerzyć.
Znalazłem w sieci fragment pytona, który, jak sądzę, wykona zadanie, ale staram się go uruchomić (ciągle otrzymuję nieprawidłowy błąd składniowy, ponieważ ciągle pojawia się błąd składniowy w wierszu 3), to bez wątpienia będzie to bardzo prosty błąd użytkownika.
Fragment kodu poniżej
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})
Oto komunikat o błędzie, który otrzymuję z wysublimowanego tekstu:
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]
Aktualizacje z pierwotnego pytania
Zaktualizowałem teraz swój kod o odpowiedź podaną poniżej, ale otrzymuję drugi błąd.
Nowy fragment kodu:
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)
Otrzymuję nowy komunikat o błędzie związany z błędem środowiska wykonawczego
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'
[Zakończono w 8.0s kodem wyjścia 1]
Zakładam, że z lektury, którą wykonałem, wiąże się to z ustawieniem środowiska pracy?
źródło
env.workspace
nie sądzę. Spróbuj albo zdjąćr
przed ścieżką, albo zmienić\` to
`na ścieżce (i zostawr
tam). Czy ta geobaza istnieje?[1,2,2,2,3,4]
, czy próbujesz zwrócić[1,2,3,4]
. Zaktualizuj post, aby uwzględnić te informacje.Odpowiedzi:
Prawie go masz, wystarczy podać nazwę swoich parametrów
table
ifield
definicję funkcji, a następnie przekazać te wartości po wywołaniu funkcji. Uważaj także na wcięcie, ponieważ jest to bardzo ważne dla Pythona.Zasadniczo oznacza to, że kiedy wywołujesz funkcję
unique_values()
, przekazujesz wartości do dwóch parametrów, jednego wywoływanegotable
, drugiego wywoływanegofield
. Są one następnie używane w twojej funkcji. Po wywołaniu funkcji w wierszuprzekazujesz wartości do tych parametrów.
Jest to to samo, co deklarowanie parametrów osobno i przekazywanie ich bezpośrednio do kursora:
źródło
set(['a', 'b', 'a', 'b'])
. Zwróci unikalne wartości{'a', 'b'}
. Użyciesorted()
tylko zwraca je w posortowanej kolejności, ponieważ prosty zestaw nie jest posortowany.Radziłbym użyciu Pythona wbudowanej
set()
funkcji wraz zSearchCursor
postaci wyrażenia generatora , aby znaleźć unikalne wartości. Przekonasz się, że to podejście jest wyjątkowo skuteczne w przypadku dużych lub małych zestawów danych:źródło
Poniższe podejście zostało opublikowane na https://arcpy.wordpress.com/2012/02/01/create-a-list-of-unique-field-values/ Korzysta z arcpy i numpy i ma mniejszą pamięć niż pamięć Podejście SearchCursor.
źródło
Wiem, że to stare pytanie, ale zostawię to tutaj każdemu, kto natknie się na to i szuka pomocy. Używanie
arcpy.Frequency_analysis()
szybko powoduje umieszczenie wszystkich unikalnych wartości z pola w nowej tabeli, której można następnie użyć do operacji kursora. Jedno polecenie, aby zrobić to, co robią wszystkie pozostałe rozwiązania, szybciej i łatwiej. Jako bonus otrzymasz także liczbę wyświetleń każdej wartości.źródło