Esportare la tabella in un file ASCII XYZ tramite ArcPy?


23

Sto cercando un modo per esportare una tabella ArcGIS (creata con lo strumento Esempio ) in un file di testo tramite ArcPy.

Posso farlo in ArcGIS tramite il menu contestuale facendo clic con il pulsante destro del mouse sulla tabella, ma non ho trovato il modo di scrivere questo.

Risposte:


31

Puoi farlo usando un cursore per prendere i dati dalla tua tabella e scrivere in un file di testo delimitato da virgole.

EDIT: sto aggiungendo un blocco di codice più conciso per completare l'attività utilizzando il csvmodulo di Python

Nuova risposta usando il cursore 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)))

Nuova risposta usando il cursore vecchio stile:

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

Vecchia risposta:

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()

Sono contento di poterti aiutare @Toni
Jason

1
@Jason - Grazie, è stato molto utile. Sono nuovo, quindi non ho la reputazione di commentare la tua risposta accettata. Penso che ci sia un piccolo errore nella nuova risposta che utilizza un cursore arcpy.da. with arcpy.da.SearchCursor(table) as cursor:dovrebbe esserewith arcpy.da.SearchCursor(table, field_names) as cursor:

Buona cattura @TylerG, ho modificato la risposta per includere l'elenco dei campi richiesti dal cursore Accesso ai dati. Grazie.
Jason,

8

Potresti voler "Esportare l'attributo della caratteristica in ASCII", sapientemente chiamato 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")

+1 per investigare! Funziona in modo interattivo ma non altrettanto bene in un modello o in uno script, poiché è necessario specificare i nomi dei campi.
matt wilkie,

1

Ecco un pezzo di codice che uso. Mi aiuta a generare tutti i miei file di output in file .txt con un intervallo da 0,100. Speriamo che aiuti

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")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.