다각형 피처 클래스를 파일 지오 데이터베이스로 출력하는 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
필드를 작성하고 있었습니다. 그들을 통해 반복 할 때마다 내가 필드 이름을 인쇄 할 수있는 라인을 추가하면 모든 필드가 나열 제외Shape
필드를 아직 여전히 CSV에 기록합니다. 또한 다각형의 X 및 Y 좌표를 두 개의 새 열로 추가했으며 열이 더 이상 열 이름과 정렬되지 않았습니다.
@sgrieve가 필드를 다음과 같이 선언하는 줄을 수정했습니다.
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
새 코드는 정상적으로 작동하지만 문제가 무엇인지 여전히 확신하지 못합니다. 아무도 무슨 일이 있었는지 알고 있습니까? Shape
현장 과의 거래는 무엇입니까 ?
Shape
필드가 파일에 기록 된 이유를 아는 사람이 있습니까? @sgrieve의 코드가 내 코드를 개선했을 수도 있지만 문제를 해결하지 못했습니다.