ฉันได้เขียนสคริปต์ไพ ธ อนโดยใช้ arcpy ซึ่งแสดงคลาสของรูปหลายเหลี่ยมในฐานข้อมูลไฟล์ ฉันได้เพิ่มฟังก์ชั่นเพื่อส่งออกคุณสมบัติไปยังไฟล์ CSV แยกต่างหาก ฉันใช้รหัสที่ฉันพบในโพสต์นี้ซึ่งทำงานได้อย่างสมบูรณ์ อย่างไรก็ตามรหัสนั้นจะส่งออกทุกคอลัมน์ในคลาสคุณลักษณะ ฉันเพียงต้องการส่งออกเขตข้อมูลที่ไม่ได้มีรายชื่อดังต่อไปนี้: OBJECTID
, หรือShape
Shape_Length
ไฟล์ CSV ของฉันสร้างสำเร็จและไม่ถูกต้องรวมถึงOBJECTID
หรือShape_Length
ฟิลด์ อย่างไรก็ตามShape
ฟิลด์นี้เขียนลงไฟล์ ค่าตัวอย่างที่เขียนลงในฟิลด์นั้นคือ:
<geoprocessing describe geometry object object at 0x28CB90A0>
ฉันได้เพิ่มบรรทัดเพื่อพิมพ์ชื่อฟิลด์ตามที่วนซ้ำและแปลกใจที่Shape
ไม่ได้พิมพ์ออกมา เหมือนกับว่า ArcGIS ซ่อนหรือให้ชื่ออื่น
รหัสสำหรับฟังก์ชั่นของฉันอยู่ด้านล่าง:
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()
ไม่มีใครรู้ว่าเกิดอะไรขึ้นที่นี่
ฉันแก้ไขรหัสของฉันเพื่อทำตามคำแนะนำของ @sgrieve และมันยังคงเขียนShape
ฟิลด์ ถ้าผมเพิ่มบรรทัดที่จะพิมพ์ชื่อฟิลด์ในขณะที่มัน iterates ผ่านพวกเขาก็จะแสดงรายการทุกสาขายกเว้นShape
ฟิลด์ แต่มันยังคงเขียนไปแบบ CSV นอกจากนี้ยังเพิ่มพิกัด X และ Y ของรูปหลายเหลี่ยมเป็นคอลัมน์ใหม่สองคอลัมน์และคอลัมน์ไม่สอดคล้องกับชื่อคอลัมน์อีกต่อไป
ฉันได้แก้ไขบรรทัดที่ @sgrieve ประกาศเขตข้อมูลดังต่อไปนี้:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
รหัสใหม่ทำงานได้ดี แต่ฉันก็ยังไม่แน่ใจว่าปัญหาคืออะไร ไม่มีใครรู้ว่าเกิดอะไรขึ้น? การจัดการกับShape
สนามคืออะไร?
Shape
สนามถูกเขียนลงในไฟล์? ในขณะที่รหัสของ @ sgrieve อาจปรับปรุงรหัสของฉัน แต่ก็ไม่ได้แก้ปัญหา