J'ai un certain nombre de colonnes dans un certain nombre de tables dans un FGDB où j'ai besoin d'extraire les valeurs uniques de chaque colonne.
Par exemple: les valeurs peuvent être [1,2,2,2,3,4], et j'essaie de retourner [1,2,3,4]
Je pourrais faire ce travail de plusieurs autres façons dans ARCGIS mais j'essaie de m'étendre.
J'ai trouvé un morceau de python sur le Web qui, je pense, fera l'affaire, mais j'ai du mal à le faire fonctionner (je reçois toujours une erreur de syntaxe non valide comme je reçois toujours l'erreur de syntaxe à la ligne 3), ce sera sans aucun doute une erreur utilisateur très simple.
Extrait de code ci-dessous
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})
Voici le message d'erreur que je reçois d'un texte sublime:
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]
Mises à jour de la question d'origine
J'ai maintenant mis à jour mon code avec la réponse fournie ci-dessous mais je reçois une erreur secondaire.
Nouvel extrait de code:
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)
Je reçois un nouveau message d'erreur lié à une erreur d'exécution
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'
[Terminé en 8.0s avec le code de sortie 1]
Je suppose que d'après la lecture que j'ai faite, cela concerne la configuration de l'espace de travail env.
la source
env.workspace
je ne pense pas. Essayez soit d'enlever l'r
avant du chemin, soit de changer le\` to
`dans le chemin (et de le laisserr
là). Cette géodatabase existe-t-elle?[1,2,2,2,3,4]
, essayez-vous de revenir[1,2,3,4]
. Veuillez mettre à jour le message pour inclure ces informations.Réponses:
Vous l'avez à peu près compris, il vous suffit de spécifier le nom de vos paramètres
table
etfield
dans la définition de votre fonction, puis de transmettre ces valeurs lorsque vous appelez la fonction. Surveillez également votre retrait, car il est vital pour Python.Fondamentalement, cela signifie que lorsque vous appelez la fonction,
unique_values()
vous passerez des valeurs à deux paramètres, l'un appelétable
, l'autre appeléfield
. Ceux-ci sont ensuite utilisés dans votre fonction. Lorsque vous appelez la fonction, dans la lignevous transmettez les valeurs à ces paramètres.
Cela revient à déclarer vos paramètres séparément et à les passer directement au curseur:
la source
set(['a', 'b', 'a', 'b'])
, il renverra des valeurs uniques{'a', 'b'}
. L'utilisation lessorted()
renvoie simplement dans l'ordre trié car un ensemble simple n'est pas trié.Je conseillerais d'utiliser la fonction intégrée de Python
set()
avec une expressionSearchCursor
comme générateur pour trouver les valeurs uniques. Vous trouverez cette approche extrêmement efficace avec des ensembles de données petits ou grands:la source
L'approche suivante a été publiée sur https://arcpy.wordpress.com/2012/02/01/create-a-list-of-unique-field-values/ Elle utilise arcpy et numpy et a une empreinte mémoire plus petite que la Approche SearchCursor.
la source
Je sais que c'est une vieille question, mais je vais laisser ceci ici à toute personne qui tombe dessus à la recherche d'aide. L'utilisation
arcpy.Frequency_analysis()
rapide place toutes les valeurs uniques d'un champ dans une nouvelle table, que vous pouvez ensuite utiliser pour les opérations de curseur. Une seule commande pour faire ce que font toutes ces autres solutions et plus rapidement et plus facilement. En prime, vous obtenez également un nombre de fois où chaque valeur apparaît.la source