J'ai écrit un script python en utilisant arcpy qui génère une classe d'entités polygonales dans une géodatabase fichier. J'ai ajouté une fonction pour exporter les attributs dans un fichier CSV séparé. J'utilise le code que j'ai trouvé dans cet article qui fonctionne parfaitement. Cependant, ce code exporte chaque colonne de la classe d'entités. Je veux seulement exporter les champs qui ne sont pas les noms suivants: OBJECTID
, Shape
ou Shape_Length
.
Mon fichier CSV est correctement généré et il n'inclut pas correctement les champs OBJECTID
ou Shape_Length
. Cependant, le Shape
champ est écrit dans le fichier. Un exemple de valeur qui est écrit dans ce champ est:
<geoprocessing describe geometry object object at 0x28CB90A0>
J'ai ajouté une ligne pour imprimer les noms de champs au fur et à mesure de leur itération et, étonnamment, Shape
n'est pas imprimé. C'est comme si ArcGIS le cache ou lui donne un nom différent.
Le code de ma fonction est ci-dessous:
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()
Est-ce que quelqu'un sait ce qui se passe ici?
J'ai modifié mon code pour suivre les conseils de @sgrieve et il écrivait toujours le Shape
champ. Si j'ajoute une ligne pour imprimer les noms de champs au fur et à mesure qu'ils les parcourent, il répertorie tous les champs sauf le Shape
champ, mais il écrit toujours dans le CSV. Il a également ajouté les coordonnées X et Y du polygone en tant que deux nouvelles colonnes et les colonnes ne sont plus alignées avec les noms des colonnes.
J'ai modifié la ligne où @sgrieve déclare que les champs sont les suivants:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
Le nouveau code fonctionne bien, mais je ne sais toujours pas quel était le problème. Quelqu'un sait-il ce qui se passait? Quel est le problème avec le Shape
domaine?
Shape
champ était écrit dans le fichier? Bien que le code de @ sgrieve ait probablement amélioré mon code, il n'a pas résolu le problème.