Vous exportez une table vers un fichier ASCII XYZ via ArcPy?

23

Je cherche un moyen d'exporter une table ArcGIS (créée avec l' outil Sample ) vers un fichier texte via ArcPy.

Je peux le faire dans ArcGIS via le menu contextuel en cliquant avec le bouton droit sur la table, mais je n'ai pas trouvé de moyen de l'écrire.

Toni
la source

Réponses:

31

Vous pouvez le faire à l'aide d'un curseur pour récupérer les données de votre table et écrire dans un fichier texte délimité par des virgules.

EDIT: J'ajoute un bloc de code plus concis pour accomplir la tâche en utilisant le csvmodule de Python

Nouvelle réponse à l'aide du curseur arcpy.da:

import arcpy,csv

table =r'c:\path\to\table'
outfile = r'c:\path\to\output\ascii\text\file'

#--first lets make a list of all of the fields in the table
fields = arcpy.ListFields(table)
field_names = [field.name for field in fields]

with open(outfile,'wb') as f:
    dw = csv.DictWriter(f,field_names)
    #--write all field names to the output file
    dw.writeheader()

    #--now we make the search cursor that will iterate through the rows of the table
    with arcpy.da.SearchCursor(table,field_names) as cursor:
        for row in cursor:
            dw.writerow(dict(zip(field_names,row)))

Nouvelle réponse à l'aide d'un curseur à l'ancienne:

import arcpy,csv

table =r'c:\path\to\table'
outfile = r'c:\path\to\output\ascii\text\file'      

#--first lets make a list of all of the fields in the table
fields = arcpy.ListFields(table)
field_names = [field.name for field in fields]

with open(outfile,'wb') as f:
    w = csv.writer(f)
    #--write all field names to the output file
    w.writerow(field_names)

    #--now we make the search cursor that will iterate through the rows of the table
    for row in arcpy.SearchCursor(table):
        field_vals = [row.getValue(field.name) for field in fields]
        w.writerow(field_vals)
    del row

Ancienne réponse:

import arcpy

table =r'c:\path\to\table'
outfile = r'c:\path\to\output\ascii\text\file'


#--first lets make a list of all of the fields in the table
fields = arcpy.ListFields(table)

i = 1
f = open(outfile,'w')
for field in fields:
    #--write all field names to the output file
    if i < len(fields):
        f.write('%s,' % field.name)
        i += 1
    else:
        f.write('%s\n' % field.name)

#--now we make the search cursor that will iterate through the rows of the table
rows = arcpy.SearchCursor(table)
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()
Jason
la source
Heureux de pouvoir vous aider @Toni
Jason
1
@Jason - Merci, cela a été très utile. Je suis nouveau donc je n'ai pas la réputation de commenter votre réponse acceptée. Je pense qu'il y a une petite erreur dans la nouvelle réponse qui utilise un curseur arcpy.da. with arcpy.da.SearchCursor(table) as cursor:devrait êtrewith arcpy.da.SearchCursor(table, field_names) as cursor:
Bonne prise @TylerG, j'ai modifié la réponse pour inclure la liste des champs requis par le curseur d'accès aux données. Merci.
Jason
8

Vous voudrez peut-être "Exporter l'attribut d'entité vers ASCII", intelligemment nommé arcpy.ExportXYv_stats

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//005p0000003v000000

import arcpy

feature = "path to feature here"
# fieldnames must be explicitly provided. Note that you will get additional fields based on the feature type (e.g., "XCoord" and "YCoord" for point features)
fieldnames = [X.name for X in arcpy.ListFields(feature)]
# delimiter options "SPACE", "COMMA", or "SEMI-COLON"
# header options "ADD_FIELD_NAMES" or "NO_FIELD_NAMES"
arcpy.ExportXYv_stats(feature, fieldnames, "SPACE", "path to outfile", "ADD_FIELD_NAMES")
Mike Richards
la source
+1 pour les détections! Cela fonctionne de manière interactive mais pas aussi bien dans un modèle ou un script, car les noms de champ doivent être spécifiés.
matt wilkie
1

Voici un morceau de code que j'utilise. Il m'aide à générer tous mes fichiers de sortie en fichier .txt avec une plage de 0,100. J'espère que cela aide

for x in xrange(0,100):
    if os.path.isfile(outfolder + "/" + "outputs" + str(x) +".shp" ):
       inFeatures = "selected_features" + str(x) +".shp"
       export_ASCII = "ASCII " + str(x) +".txt"
       arcpy.ExportXYv_stats(inFeatures, ["Cur1_pr2","Cur3_pl1","slp1"],"SPACE", export_ASCII,"ADD_FIELD_NAMES")
MaxG
la source