我已经使用arcpy编写了python脚本,该脚本将面要素类输出到File Geodatabase中。我添加了将属性导出到单独的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
字段。如果我添加一行以在遍历字段名称时打印它们,它会列出除字段之外的所有Shape
字段,但仍会写入CSV。它还将面的X和Y坐标添加为两个新列,并且这些列不再与列名对齐。
我修改了@sgrieve声明以下字段的行:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
新代码可以正常工作,但我仍然不确定问题出在哪里。有人知道发生了什么吗?这个Shape
领域怎么办?
Shape
字段写入文件?尽管@sgrieve的代码可能会改进我的代码,但并不能解决问题。