मैंने आर्कपी का उपयोग करते हुए एक पायथन स्क्रिप्ट लिखी है जो एक बहुभुज फीचर क्लास को फाइल जियोडेटाबेस में आउटपुट करता है। मैंने विशेषताओं को एक अलग CSV फ़ाइल में निर्यात करने के लिए एक फ़ंक्शन जोड़ा है। मैं इस पोस्ट में पाए गए कोड का उपयोग कर रहा हूं जो पूरी तरह से काम करता है। हालाँकि, वह कोड फीचर क्लास के हर कॉलम को एक्सपोर्ट करता है। मैं केवल क्षेत्रों में निम्न नाम की जरूरत नहीं है कि निर्यात करना चाहते हैं: OBJECTID
, Shape
, या Shape_Length
।
मेरी CSV फ़ाइल सफलतापूर्वक उत्पन्न होती है, और इसमें सही रूप से या फ़ील्ड शामिल नहीं हैं । हालांकि, क्षेत्र है फाइल करने के लिए लिखा है। एक उदाहरण मान जो उस फ़ील्ड में लिखा गया है:OBJECTID
Shape_Length
Shape
<geoprocessing describe geometry object object at 0x28CB90A0>
मैंने फ़ील्ड नामों को मुद्रित करने के लिए एक पंक्ति जोड़ी है क्योंकि यह उनके माध्यम से पुनरावृत्त करता है और आश्चर्यजनक रूप से, Shape
मुद्रित नहीं होता है। यह ऐसा है जैसे कि आर्कगिस इसे छिपा रहा है या इसे एक अलग नाम देता है।
मेरे फ़ंक्शन का कोड नीचे है:
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
क्षेत्र है, फिर भी यह अभी भी सीएसवी करने के लिए लिखता है। इसने बहुभुज के X और Y निर्देशांक को दो नए स्तंभों के रूप में भी जोड़ा और स्तंभों को स्तंभ नामों के साथ संरेखित नहीं किया गया।
मैंने उस पंक्ति को संशोधित किया है जहाँ @sgrieve निम्नलिखित क्षेत्रों की घोषणा करता है:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
नया कोड ठीक काम करता है, लेकिन मैं अभी भी अनिश्चित हूं कि समस्या क्या थी। क्या किसी को पता है कि क्या चल रहा था? Shape
क्षेत्र के साथ क्या सौदा है ?
Shape
फ़ाइल को फ़ील्ड लिखा जा रहा है? जबकि @ sgrieve के कोड ने संभवतः मेरे कोड में सुधार किया, लेकिन इससे समस्या हल नहीं हुई।