ส่งออกตารางเป็นไฟล์ XYZ ASCII ผ่าน ArcPy หรือไม่


23

ฉันกำลังมองหาวิธีการส่งออกตาราง ArcGIS (สร้างด้วยเครื่องมือตัวอย่าง ) ไปยังไฟล์ข้อความผ่าน ArcPy

ฉันสามารถทำได้ใน ArcGIS ผ่านเมนูบริบทโดยคลิกขวาที่ตาราง แต่ไม่พบวิธีที่จะเขียนสคริปต์นี้

คำตอบ:


31

คุณสามารถทำได้โดยใช้เคอร์เซอร์เพื่อดึงข้อมูลจากตารางของคุณและเขียนลงในไฟล์ข้อความที่คั่นด้วยจุลภาค

แก้ไข: ฉันกำลังเพิ่มบล็อกของโค้ดที่กระชับยิ่งขึ้นเพื่อให้งานสำเร็จโดยใช้csvโมดูลของ Python

คำตอบใหม่โดยใช้เคอร์เซอร์ 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)))

คำตอบใหม่โดยใช้เคอร์เซอร์แบบเก่า:

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

คำตอบเก่า:

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

ดีใจที่ฉันสามารถช่วยคุณ @Toni
Jason

1
@Jason - ขอบคุณนี่เป็นประโยชน์มาก ฉันใหม่ดังนั้นฉันไม่มีชื่อเสียงที่จะแสดงความคิดเห็นในคำตอบที่คุณยอมรับ ฉันคิดว่ามีข้อผิดพลาดเล็กน้อยในคำตอบใหม่ที่ใช้เคอร์เซอร์ arcpy.da with arcpy.da.SearchCursor(table) as cursor:ควรเป็นwith arcpy.da.SearchCursor(table, field_names) as cursor:

เยี่ยมมาก @TylerG ฉันได้แก้ไขคำตอบเพื่อรวมรายการเขตข้อมูลที่เคอร์เซอร์ Data Access ต้องการ ขอบคุณ
Jason

8

คุณอาจต้องการ "ส่งออกคุณสมบัติแอททริบิวเป็น ASCII" อย่างชาญฉลาดที่ชื่อว่า 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 สำหรับนักสืบ! สิ่งนี้ทำงานได้แบบโต้ตอบ แต่ไม่เหมือนกันในรูปแบบหรือสคริปต์เนื่องจากต้องระบุชื่อฟิลด์
matt wilkie

1

นี่คือส่วนหนึ่งของรหัสที่ฉันใช้ มันช่วยให้ฉันสร้างไฟล์เอาต์พุตของฉันทั้งหมดเป็นไฟล์. txt ด้วยช่วงตั้งแต่ 0,100 หวังว่ามันจะช่วย

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")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.