Lagi

Membuat alat di kotak alat Python untuk mengekspor daftar bidang ke Excel?

Membuat alat di kotak alat Python untuk mengekspor daftar bidang ke Excel?


Saya membuat alat pertama saya di Python Toolbox (*.pyt) untuk mengekspor daftar nama bidang ke Excel. Saya memiliki bit kode berikut:

import arcpy class Toolbox(objek): def __init__(self): self.label = "Toolbox" self.alias = "Field to Table" self.tools = [Tool] class Tool(objek): def __init__(self): self .label = "Tool" self.description = "Ekspor Bidang ke Tabel" self.canRunInBackground = Salah def getParameterInfo(self): param0 = arcpy.Parameter( displayName="Shapefile", name="shapefile", datatype="DEShapefile" , parameterType="Diperlukan", direction="Input") param1 = arcpy.Parameter( displayName="Field Table", name="datafile", datatype="DETable", parameterType="Diperlukan", direction="Output") params = [param0, param1] kembalikan params def isLicensed(self): return True def updateParameters(self, parameter): return def updateMessages(self, parameter): return def execute(self, parameter, pesan): shapefile = params[0 ].valueAsText field = arcpy.ListFields(shapefile) datafile = params[1].valueAsText spreds = buka (datafile, 'w') untuk f di bidang: spreds.write(f.name + "
") spreds.close () kembali

Pertama, bagian eksekusi kode yang sebenarnya berfungsi dengan baik karena saya telah mengujinya. Saya tidak yakin apa yang salah ketika saya mengonversi ke file .pyt.

Setelah saya berhasil, apakah ada cara untuk membuat parameter di dalam alat untuk membuat file excel/dbf baru, dan menjalankan skrip dengan informasi itu, daripada harus membuatnya terlebih dahulu, sebelum menjalankan skrip. Saya harap itu masuk akal.


Saya percaya masalah utama Anda adalah bagaimana parameter diteruskan ke eksekusi. Mendefinisikan parameter objek berfungsi seperti fungsi di mana deklarasi tidak bersifat global. Cobalah ini:

def execute(self, params, messages): #params adalah daftar parameter Anda dari getParameterInfo shapefile = params[0].valueAsText #parameter pertama dari daftar Anda field = arcpy.ListFields(shapefile) #capitalization maters excelfile = params[1]. valueAsText #parameter detik dari daftar Anda spreds = buka (excelfile, 'w') untuk f di bidang: spreds.write(f.name + "
") spreds.close() return

Untuk info lebih lanjut: Mengakses parameter dalam kotak alat Python

Juga: Indentasi objek def, tambahkan kelas Toolbox(objek) seperti yang ditunjukkan pada contoh ini dan ubah GPShapefile menjadi DEShapefile atau GPLayer sesuai dengan tipe data


Jawaban oleh @jbosq mengatasi masalah mengakses parameter dan kesalahan indentasi Anda.

Namun, kode apa adanya akan membuka jalan keberkas Excelsebagai file teks, bukan spreadsheet Excel dan cukup tulis nama bidang yang dipisahkan oleh baris baru ke file teks ini. Anda perlu menggunakanxlwt(untuk .xls Excel 2003 spreadsheet biner) atauopenpyxl(untuk spreadsheet .xlsx Excel 2007+ OOXML) atauarcpy.management.CreateTable/arcpy.da.InsertCursoralih-alih python bawaanmembuka()fungsi.

Selain itu (per komentar @ Paul), ubaharah = "Masukan"kearah="Keluaran")untuk param1.

Terakhir, jika Anda menulis data ke spreadsheet menggunakanxlwtatauopenpyxldari padaarcpy.management.CreateTable/arcpy.da.InsertCursoranda perlu mengubah tipe data param1 dariDETablekeMencemaridan tambahkan filter yaituparam1.filter.list = ['xls'](jika menggunakanxlwt) atauparam1.filter.list = ['xlsx'](jika menggunakanopenpyxl).


Tonton videonya: Python Tutorial - Python for Beginners Full Course