Script Python para exportar tabelas .csv do GDB

8

Eu sou muito novo na programação Python e fui encarregado de escrever um programa para exportar um arquivo csv de uma classe de recurso de geodatabase de arquivo. O csv deve conter apenas determinados campos e os registros exportados devem ser baseados na data da última edição. Em outras palavras, o arquivo csv será criado diariamente, contendo apenas os últimos recursos adicionados, com base no "campo da data da última edição".

Eu tenho isso até agora:

import arcpy
import os
import csv
import domainvalues

def export_to_csv(dataset, output, dialect):
    """Output the data to a CSV file"""
    # create the output writer
    out_writer = csv.writer(open(output, 'wb'), dialect=dialect)
    # return the list of field names and field values
    header, rows = domainvalues.header_and_iterator(dataset)

    # write the field names and values to the csv file
    out_writer.writerow(map(domainvalues._encodeHeader, header))
    for row in rows:
        out_writer.writerow(map(domainvalues._encode, row))

if __name__ == "__main__":
    # Get parameters
    dataset_name = arcpy.GetParameterAsText(0)
    output_file = arcpy.GetParameterAsText(1)
    delim = arcpy.GetParameterAsText(2).lower()
    dialect = 'excel'
    if delim == 'comma':
        pass
    else:
        dialect = 'excel-tab'
    try:
        export_to_csv(dataset_name, output_file, dialect)
    except Exception as err:
        arcpy.AddError('Error: {0}'.format(err))

No entanto, está exportando tudo.

user35267
fonte
Como você publica o que você tem até agora? Novo no
stackexchange
2
Acho que o Curlew significa é que você deve colocar algum código na sua pergunta (editar sua pergunta), para mostrar que você tentou fazer isso e, em seguida, podemos ajudá-lo a descobrir onde você pode estar errado (para que não parece que você está apenas tentando fazer a comunidade escrever um script para você).
Jbchurchill

Respostas:

10

Uma solução mais simples seria converter para o formato de arquivo dbf; nesse caso, você pode usar a tabela em tabela pronta para uso (conversão) . Essa ferramenta também permite a liberdade de selecionar quais campos incluir como FieldMappings , além de gerar diretamente um arquivo .dbf.

import arcpy

fc = r'C:\path\to\your\fc'
outws = r'C:\temp'

arcpy.TableToTable_conversion (fc, outws, 'outFile.dbf')
Aaron
fonte
6
-1 Isso cria um arquivo dbf chamado outFile.dbf, não um arquivo csv. A saída do arquivo CSV não é suportada. This tool can convert input tables to dBASE (.dbf), geodatabase (personal, file, or SDE), or INFO tables
Pelos
@ReganSarwas Obrigado pelo aviso. Eu editei a pergunta para endereçar seus comentários. A idéia principal aqui é que essa é uma solução alternativa e mais simples do que a conversão para csv.
Aaron
7

O ArcGIS já possui uma ferramenta para fazer isso chamada " Exportar Atributos de Recursos para ASCII ", que está na caixa de ferramentas Estatísticas Espaciais -> Utilitários.

A vantagem desta ferramenta sobre "Tabela em tabela" é que você pode 1) definir seu delimitador (espaço, vírgula, guia), 2) escolher os campos que deseja exportar e 3) escolher se deseja ou não exportar seus nomes de campos para o arquivo CSV. Também é um script Python, para que você possa copiar esse arquivo e criar sua própria variante com muita facilidade.

Portanto, se você deseja criar um modelo ou script para exportar apenas os recursos mais recentes com base no "campo da data da última edição", basta preceder a ferramenta "Exportar atributos do recurso para ASCII" com a ferramenta "Selecionar camada por atributo" na qual você chama a consulta que você deseja executar.

RyanKDalton
fonte
3
Ao responder estritamente a questão como publicado, é importante notar que a ferramenta suporta apenas classes de recurso, não tabelas ...
jburka
3

Digamos que você tenha um arquivo GDB chamado treedn.gdbcom uma tabela chamada treese deseje exportar para um CSV chamado trees.csv.

Você pode fazer algo semelhante a isto:

import arcpy
import csv

wd = #<working directory>
table   = wd+"/treedn.gdb/trees"
outfile = wd+"/treedn/trees.csv"      

fields = arcpy.ListFields(table)
field_names = [field.name for field in fields]

with open(outfile,'wb') as f:
    w = csv.writer(f)
    w.writerow(field_names)
    for row in arcpy.SearchCursor(table):
        field_vals = [row.getValue(field.name) for field in fields]
        w.writerow(field_vals)
    del row

o artigo inteiro está localizado aqui .

Blairg23
fonte
1

O ArcGIS 10.3 possui uma nova função ConvertTableToCsvFile_roads para converter uma tabela em um arquivo CSV. Isso é bastante simples de usar:

import arcpy
from arcpy import env

arcpy.env.workspace="C:/mydata.gdb"
arcpy.ConvertTableToCsvFile_roads("input_table", "C:myfolder/output_csv_file.csv", "COMMA")

Veja aqui o documento completo.

Esteja ciente de que você precisa de uma licença da caixa de ferramentas Estradas e Rodovias para usá-la. A partir da versão 10.4, essa função é chamada ConvertTableToCsvFile_locref.

julien
fonte