Tôi đã viết một tập lệnh python bằng cách sử dụng arcpy, nó đưa ra một lớp tính năng đa giác vào Cơ sở dữ liệu địa lý tệp. Tôi đã thêm một chức năng để xuất các thuộc tính vào một tệp CSV riêng biệt. Tôi đang sử dụng mã mà tôi đã tìm thấy trong bài viết này hoạt động hoàn hảo. Tuy nhiên, mã đó xuất mọi cột trong lớp tính năng. Tôi chỉ muốn export các lĩnh vực mà không có tên sau: OBJECTID
, Shape
, hoặc Shape_Length
.
Tệp CSV của tôi tạo thành công và chính xác nó không bao gồm các trường OBJECTID
hoặc Shape_Length
. Tuy nhiên, Shape
trường được ghi vào tệp. Một giá trị mẫu được ghi vào trường đó là:
<geoprocessing describe geometry object object at 0x28CB90A0>
Tôi đã thêm một dòng để in tên trường khi nó lặp qua chúng và đáng ngạc nhiên, Shape
không được in. Như thể ArcGIS đang che giấu nó hoặc đặt cho nó một cái tên khác.
Mã cho chức năng của tôi là dưới đây:
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()
Có ai biết chuyện gì đang xảy ra ở đây không?
Tôi đã sửa đổi mã của mình để làm theo lời khuyên của @sgrieve và nó vẫn đang viết Shape
trường. Nếu tôi thêm một dòng để in tên trường vì nó lặp qua chúng, nó sẽ liệt kê tất cả các lĩnh vực ngoại trừ các Shape
lĩnh vực, tuy nhiên nó vẫn ghi vào CSV. Nó cũng đã thêm tọa độ X và Y của đa giác dưới dạng hai cột mới và các cột không còn thẳng hàng với tên cột.
Tôi đã sửa đổi dòng trong đó @sgrieve tuyên bố các trường như sau:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
Mã mới hoạt động tốt, nhưng tôi vẫn không chắc vấn đề là gì. Có ai biết chuyện gì đang xảy ra không? Thỏa thuận với Shape
lĩnh vực này là gì?
Shape
lĩnh vực đã được ghi vào tập tin? Mặc dù mã của @ sgrieve có thể cải thiện mã của tôi, nhưng nó không giải quyết được vấn đề.