Saya memiliki sejumlah kolom dalam sejumlah tabel di dalam FGDB di mana saya perlu mengekstraksi nilai unik untuk setiap kolom.
Sebagai Contoh: nilainya mungkin [1,2,2,2,3,4], dan saya mencoba untuk mengembalikan [1,2,3,4]
Saya dapat melakukan pekerjaan ini dengan beberapa cara lain dalam ARCGIS tetapi saya mencoba untuk memperluas diri.
Saya telah menemukan sepotong python di web yang saya pikir akan melakukan pekerjaan itu tetapi saya berjuang untuk menjalankannya (saya terus mendapatkan kesalahan sintaks yang tidak valid karena saya terus mendapatkan kesalahan sintaks di baris 3) ini tidak diragukan lagi akan kesalahan pengguna yang sangat sederhana.
Cuplikan Kode di bawah ini
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})
Ini adalah Pesan Kesalahan yang saya dapatkan dari teks luhur:
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]
Pembaruan dari Pertanyaan Asli
Saya sekarang telah memperbarui kode saya dengan jawaban yang diberikan di bawah ini tetapi saya menerima kesalahan sekunder.
Cuplikan Kode Baru:
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)
Saya mendapatkan pesan kesalahan baru yang terkait dengan kesalahan runtime
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'
[Selesai dalam 8.0s dengan kode keluar 1]
Saya berasumsi dari bacaan yang telah saya lakukan bahwa ini berkaitan dengan pengaturan env.workspace?
sumber
env.workspace
Saya tidak berpikir. Coba lepaskanr
sebelum jalan, atau ubah\` to
`di jalan (dan biarkan dir
sana). Apakah Geodatabase itu ada?[1,2,2,2,3,4]
, apakah Anda mencoba untuk mengembalikan[1,2,3,4]
. Harap perbarui pos untuk memasukkan informasi ini.Jawaban:
Anda sudah cukup mengerti, Anda hanya perlu menentukan nama parameter Anda
table
danfield
dalam definisi fungsi Anda, dan kemudian meneruskan nilai-nilai itu ketika Anda memanggil fungsi. Perhatikan lekukan Anda, karena ini penting untuk Python.Pada dasarnya ini mengatakan bahwa ketika Anda memanggil fungsi
unique_values()
Anda akan memberikan nilai ke dua parameter, satu disebuttable
, yang lainnya disebutfield
. Ini kemudian digunakan dalam fungsi Anda. Ketika Anda memanggil fungsi, di teleponAnda meneruskan nilai ke parameter ini.
Ini sama dengan mendeklarasikan parameter Anda secara terpisah dan meneruskannya ke kursor secara langsung:
sumber
set(['a', 'b', 'a', 'b'])
, itu akan mengembalikan nilai unik{'a', 'b'}
. Menggunakansorted()
hanya mengembalikannya dalam urutan yang diurutkan karena set sederhana tidak disortir.Saya akan menyarankan menggunakan
set()
fungsi built-in Python bersama denganSearchCursor
sebagai ekspresi generator untuk menemukan nilai-nilai unik. Anda akan menemukan pendekatan ini sangat efisien dengan kumpulan data besar atau kecil:sumber
Pendekatan berikut diterbitkan di https://arcpy.wordpress.com/2012/02/01/create-a-list-of-unique-field-values/ Menggunakan busur dan numpy dan memiliki jejak memori yang lebih kecil daripada Pendekatan SearchCursor.
sumber
Saya tahu ini pertanyaan lama, tetapi saya akan meninggalkan ini di sini untuk siapa saja yang menemukan ini mencari bantuan. Menggunakan
arcpy.Frequency_analysis()
dengan cepat menempatkan semua nilai unik dari bidang ke tabel baru, yang kemudian dapat Anda gunakan untuk operasi kursor. Satu perintah tunggal untuk melakukan apa yang semua solusi lain lakukan dan lebih cepat dan lebih mudah. Sebagai bonus, Anda juga mendapatkan hitungan berapa kali setiap nilai muncul.sumber