Saya telah menulis skrip python menggunakan arcpy yang menampilkan kelas fitur poligon menjadi File Geodatabase. Saya telah menambahkan fungsi untuk mengekspor atribut ke file CSV yang terpisah. Saya menggunakan kode yang saya temukan di posting ini yang berfungsi dengan baik. Namun, kode itu mengekspor setiap kolom di kelas fitur. Saya hanya ingin mengekspor bidang yang tidak memiliki nama berikut: OBJECTID
, Shape
, atau Shape_Length
.
File CSV saya berhasil dibuat, dan dengan benar tidak menyertakan bidang OBJECTID
atau Shape_Length
. Namun, Shape
bidang ini ditulis ke file. Nilai contoh yang ditulis untuk bidang itu adalah:
<geoprocessing describe geometry object object at 0x28CB90A0>
Saya telah menambahkan baris untuk mencetak nama-nama bidang karena berulang melalui mereka dan secara mengejutkan, Shape
tidak dicetak. Seolah-olah ArcGIS menyembunyikannya atau memberinya nama yang berbeda.
Kode untuk fungsi saya di bawah:
def exportToTable():
"""
Exports the final outputs to a CSV File.
"""
# Create path to CSV File (note the varialbe outputPath is declared elsewhere).
CSVFile = outputPath+'\\FinalOutput.csv'
arcpy.AddMessage("Created CSV File: %s" %CSVFile)
# Get all fields in FinalOutput feature class and remove unwanted fields.
fields = arcpy.ListFields('FinalOutput')
for field in fields:
arcpy.AddMessage("Field.name is:"+field.name) #not printing 'Shape' field name
if field.name in (['OBJECTID', 'Shape', 'Shape_Length']):
fields.remove(field)
i = 1
f=open(CSVFile, 'w')
for field in fields:
#--write the wanted field names to the output file
if i < len(fields):
f.write('%s,' % field.name)
i += 1
else:
f.write('%s\n' % field.name)
# Use a search cursor to iterate through the rows of the table and write them to the CSV file.
rows = arcpy.SearchCursor('FinalOutput')
for row in rows:
i = 1
for field in fields:
if i < len(fields):
f.write('%s,' % row.getValue(field.name))
i += 1
else:
f.write('%s\n' % row.getValue(field.name))
del rows
f.close()
Adakah yang tahu apa yang terjadi di sini?
Saya memodifikasi kode saya untuk mengikuti saran dari @sgrieve dan masih menulis kolom Shape
. Jika saya menambahkan baris untuk mencetak nama field sebagai iterates melalui mereka, itu daftar semua bidang kecuali dalam Shape
lapangan, namun masih menulis ke CSV tersebut. Itu juga menambahkan koordinat X dan Y dari poligon sebagai dua kolom baru dan kolom tidak lagi selaras dengan nama kolom.
Saya telah memodifikasi baris tempat @sgrieve menyatakan bidang sebagai berikut:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
Kode baru berfungsi dengan baik, tapi saya masih tidak yakin apa masalahnya. Adakah yang tahu apa yang sedang terjadi? Apa masalahnya dengan Shape
bidang itu?
Shape
bidang ini ditulis ke file? Sementara kode @ sgrieve mungkin memperbaiki kode saya, itu tidak menyelesaikan masalah.