Mengekspor tabel ke file XYZ ASCII via ArcPy?

23

Saya mencari cara untuk mengekspor tabel ArcGIS (dibuat dengan alat Sampel ) ke file teks melalui ArcPy.

Saya dapat melakukan ini di ArcGIS melalui menu konteks dengan mengklik kanan tabel, tetapi belum menemukan cara untuk skrip ini.

Toni
sumber

Jawaban:

31

Anda dapat melakukan ini menggunakan kursor untuk mengambil data dari tabel Anda dan menulis ke file teks yang dibatasi koma.

EDIT: Saya menambahkan blok kode yang lebih ringkas untuk menyelesaikan tugas menggunakan csvmodul Python

Jawaban Baru menggunakan kursor 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)))

Jawaban Baru menggunakan kursor gaya lama:

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

Jawaban lama:

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
sumber
Senang saya bisa membantu Anda @Toni
Jason
1
@Jason - Terima kasih, ini sangat membantu. Saya baru jadi saya tidak memiliki reputasi untuk mengomentari jawaban yang Anda terima. Saya pikir ada kesalahan kecil dalam jawaban baru yang menggunakan kursor arcpy.da. with arcpy.da.SearchCursor(table) as cursor:seharusnyawith arcpy.da.SearchCursor(table, field_names) as cursor:
Good catch @TylerG, saya sudah mengedit jawaban untuk menyertakan daftar bidang yang diperlukan oleh kursor Akses Data. Terima kasih.
Jason
8

Anda mungkin ingin "Ekspor Atribut Fitur ke ASCII", dinamai 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
sumber
+1 untuk sleuthing! Ini berfungsi secara interaktif tetapi tidak juga dalam model atau skrip, karena nama bidang harus ditentukan.
matt wilkie
1

Ini adalah sepotong kode yang saya gunakan. Ini membantu saya menghasilkan semua file output saya ke file .txt dengan kisaran dari 0,100. Semoga bermanfaat

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")
Maks
sumber