Xuất bảng sang tệp XYZ ASCII qua ArcPy?


23

Tôi đang tìm cách xuất bảng ArcGIS (được tạo bằng công cụ Mẫu ) sang tệp văn bản qua ArcPy.

Tôi có thể thực hiện việc này trong ArcGIS thông qua menu ngữ cảnh bằng cách nhấp chuột phải vào bảng, nhưng chưa tìm được cách nào để tạo kịch bản này.

Câu trả lời:


31

Bạn có thể làm điều này bằng cách sử dụng một con trỏ để lấy dữ liệu từ bảng của bạn và ghi vào tệp văn bản được phân cách bằng dấu phẩy.

EDIT: Tôi đang thêm một khối mã ngắn gọn hơn để hoàn thành nhiệm vụ bằng cách sử dụng csvmô-đun của Python

Câu trả lời mới sử dụng con trỏ 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)))

Trả lời mới bằng cách sử dụng con trỏ kiểu cũ:

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

Câu trả lời cũ:

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

Vui mừng tôi có thể giúp bạn @Toni
Jason

1
@Jason - Cảm ơn, điều này rất hữu ích. Tôi là người mới nên tôi không có tiếng để nhận xét về câu trả lời được chấp nhận của bạn. Tôi nghĩ rằng có một lỗi nhỏ trong câu trả lời mới sử dụng con trỏ arcpy.da. with arcpy.da.SearchCursor(table) as cursor:nên làwith arcpy.da.SearchCursor(table, field_names) as cursor:

Bắt tốt @TylerG, tôi đã chỉnh sửa câu trả lời để bao gồm danh sách các trường được yêu cầu bởi con trỏ Truy cập Dữ liệu. Cảm ơn.
Jason

8

Bạn có thể muốn "Xuất thuộc tính tính năng sang ASCII", được đặt tên khéo léo 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 cho điều tra! Điều này hoạt động tương tác nhưng không tốt trong một mô hình hoặc tập lệnh, bởi vì tên trường phải được chỉ định.
matt wilkie

1

Đây là một đoạn mã tôi sử dụng. Nó giúp tôi tạo tất cả các tệp đầu ra của mình thành tệp .txt với phạm vi từ 0,100. Hy vọng nó sẽ giúp

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")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.