Exportieren einer Tabelle in eine XYZ-ASCII-Datei über ArcPy?


23

Ich suche nach einer Möglichkeit, eine ArcGIS-Tabelle (erstellt mit dem Beispiel-Tool ) über ArcPy in eine Textdatei zu exportieren.

Ich kann dies in ArcGIS über das Kontextmenü tun, indem ich mit der rechten Maustaste auf die Tabelle klicke, habe jedoch keine Möglichkeit gefunden, dies zu skripten.

Antworten:


31

Verwenden Sie dazu einen Cursor, um die Daten aus Ihrer Tabelle zu erfassen und in eine durch Kommas getrennte Textdatei zu schreiben.

BEARBEITEN: Ich füge einen präziseren Codeblock hinzu, um die Aufgabe mit dem csvModul von Python zu erledigen

Neue Antwort mit arcpy.da-Cursor:

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

Neue Antwort mit altem Cursor:

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

Alte Antwort:

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

Froh, dass ich dir helfen konnte @Toni
Jason

1
@Jason - Danke, das war sehr hilfreich. Ich bin neu, daher habe ich nicht den Ruf, Ihre akzeptierte Antwort zu kommentieren. Ich denke, es gibt einen kleinen Fehler in der neuen Antwort, die einen arcpy.da-Cursor verwendet. with arcpy.da.SearchCursor(table) as cursor:sollte seinwith arcpy.da.SearchCursor(table, field_names) as cursor:

Guter Fang @TylerG, ich habe die Antwort so bearbeitet, dass sie die Liste der Felder enthält, die für den Datenzugriffs-Cursor erforderlich sind. Vielen Dank.
Jason

8

Möglicherweise möchten Sie das "Feature-Attribut nach ASCII exportieren" mit dem cleveren Namen arcpy.ExportXYv_stats

http://help.arcgis.com/de/arcgisdesktop/10.0/help/index.html#//005p00003v000000

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 für das Sleuthing! Dies funktioniert interaktiv, jedoch nicht so gut in einem Modell oder Skript, da die Feldnamen angegeben werden müssen.
Matt Wilkie

1

Hier ist ein Stück Code, den ich benutze. Es hilft mir, alle meine Ausgabedateien in TXT-Dateien mit einem Bereich von 0,100 zu generieren. Hoffentlich hilft es

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")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.