Exportando tabela para o arquivo XYZ ASCII via ArcPy?


23

Estou procurando uma maneira de exportar uma tabela do ArcGIS (criada com a ferramenta Amostra ) para um arquivo de texto via ArcPy.

Eu posso fazer isso no ArcGIS através do menu de contexto clicando com o botão direito do mouse na tabela, mas não encontrei uma maneira de fazer isso.

Respostas:


31

Você pode fazer isso usando um cursor para pegar os dados da sua tabela e gravar em um arquivo de texto delimitado por vírgula.

EDIT: estou adicionando um bloco de código mais conciso para realizar a tarefa usando o csvmódulo do Python

Nova resposta usando o cursor 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)))

Nova resposta usando o cursor de estilo antigo:

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

Resposta antiga:

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

Ainda bem que pude ajudá-lo @Toni
Jason

1
@ Jason - Obrigado, isso foi muito útil. Sou novo, por isso não tenho reputação de comentar sua resposta aceita. Acho que há um pequeno erro na nova resposta que usa um cursor arcpy.da. with arcpy.da.SearchCursor(table) as cursor:deve serwith arcpy.da.SearchCursor(table, field_names) as cursor:

Boa captura @TylerG, editei a resposta para incluir a lista de campos exigidos pelo cursor do Data Access. Obrigado.
Jason

8

Você pode querer o "Exportar Atributo do Recurso para ASCII", habilmente chamado de 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 para investigação! Isso funciona de maneira interativa, mas não tão bem em um modelo ou script, porque os nomes dos campos devem ser especificados.
Matt Wilkie

1

Aqui está um pedaço de código que eu uso. Isso me ajuda a gerar todos os meus arquivos de saída para o arquivo .txt com um intervalo de 0,100. Espero que ajude

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")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.