У меня есть несколько столбцов в нескольких таблицах в FGDB, где мне нужно извлечь уникальные значения для каждого столбца.
Например: значения могут быть [1,2,2,2,3,4], и я пытаюсь вернуть [1,2,3,4]
Я мог бы сделать эту работу несколькими другими способами в ARCGIS, но я пытаюсь расширить себя.
Я нашел в сети кусок python, который, я думаю, справится с работой, но я изо всех сил пытаюсь заставить его работать (я получаю недопустимую синтаксическую ошибку, так как я получаю синтаксическую ошибку в строке 3), это, несомненно, будет действительно простая ошибка пользователя.
Фрагмент кода ниже
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})
Это сообщение об ошибке, которое я получаю из возвышенного текста:
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]
Обновления от оригинального вопроса
Теперь я обновил свой код ответом, приведенным ниже, но получаю вторичную ошибку.
Новый фрагмент кода:
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)
Я получаю новое сообщение об ошибке, связанной с ошибкой во время выполнения
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'
[Закончено в 8.0 с кодом выхода 1]
Я предполагаю из прочитанного мною чтения, что это относится к настройке env.workspace?
источник
env.workspace
я не думаю. Попробуйте либо снятьr
путь перед путем, либо изменить\` to
`в пути (и оставитьr
там). Эта база геоданных существует?[1,2,2,2,3,4]
, вы пытаетесь вернуть[1,2,3,4]
. Пожалуйста, обновите пост, чтобы включить эту информацию.Ответы:
Вы в значительной степени получили его, вам просто нужно указать имя ваших параметров
table
иfield
в определении вашей функции, а затем передать эти значения при вызове функции. Также следите за отступами, так как это важно для Python.В основном это говорит о том, что когда вы вызываете функцию,
unique_values()
вы передаете значения двум параметрам, один из которых вызываетсяtable
, а другой вызываетсяfield
. Затем они используются в вашей функции. Когда вы вызываете функцию, в строкевы передаете значения этим параметрам.
Это то же самое, что объявить ваши параметры отдельно и передать их курсору напрямую:
источник
set(['a', 'b', 'a', 'b'])
, он будет возвращать уникальные значения{'a', 'b'}
. Использованиеsorted()
просто возвращает их в отсортированном порядке, так как простой набор не отсортирован.Я бы посоветовал использовать Python встроенный в
set()
функции наряду сSearchCursor
как выражение генератора , чтобы найти уникальные значения. Вы найдете этот подход чрезвычайно эффективным с большими или маленькими наборами данных:источник
Следующий подход был опубликован на https://arcpy.wordpress.com/2012/02/01/create-a-list-of-unique-field-values/. Он использует arcpy и numpy и имеет меньший объем памяти, чем Подход SearchCursor.
источник
Я знаю, что это старый вопрос, но я оставлю это здесь для любого, кто наткнется на это в поисках помощи. Использование
arcpy.Frequency_analysis()
быстро помещает все уникальные значения из поля в новую таблицу, которую затем можно использовать для операций с курсором. Одна команда, чтобы сделать то, что делают все эти другие решения, быстрее и проще. В качестве бонуса вы также получаете счетчик того, сколько раз появляется каждое значение.источник