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.
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 tablewith 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 tablefor 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 fileif i < len(fields):
f.write('%s,'% field.name)
i +=1else:
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 =1for field in fields:if i < len(fields):
f.write('%s,'% row.getValue(field.name))
i +=1else:
f.write('%s\n'% row.getValue(field.name))del rows
f.close()
@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
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")
with arcpy.da.SearchCursor(table) as cursor:
sollte seinwith arcpy.da.SearchCursor(table, field_names) as cursor:
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
quelle
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
quelle