Script de Python para exportar tablas .csv desde GDB

8

Soy muy nuevo en la programación de Python y me encargaron escribir un programa para exportar un archivo csv desde una clase de entidad de geodatabase de archivos. El csv debe contener solo ciertos campos y los registros exportados deben basarse en la última fecha de edición. En otras palabras, el archivo csv se creará diariamente con solo las últimas funciones agregadas en función del "último campo de fecha de edición".

Tengo esto hasta ahora:

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

Sin embargo, está exportando todo.

usuario35267
fuente
¿Cómo publicas lo que tienes hasta ahora? Nuevo en stackexchange también
user35267
2
Creo que lo que quiere decir Curlew es que debes poner algo de código en tu pregunta (editar tu pregunta) para que demuestre que has intentado hacer esto y luego podemos ayudarte a descubrir dónde puedes estar yendo mal (para que no parece que solo está intentando que la comunidad escriba un guión para usted).
jbchurchill

Respuestas:

10

Una solución más simple sería convertir a formato de archivo dbf, en cuyo caso puede usar la tabla a tabla lista para usar (conversión) . Esta herramienta también le da la libertad de seleccionar qué campos incluir como FieldMappings , así como también generar directamente un archivo .dbf.

import arcpy

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

arcpy.TableToTable_conversion (fc, outws, 'outFile.dbf')
Aaron
fuente
66
-1 Esto crea un archivo dbf llamado outFile.dbf, no un archivo csv. La salida del archivo CSV no es compatible. Según los documentos a los que se hace referencia: This tool can convert input tables to dBASE (.dbf), geodatabase (personal, file, or SDE), or INFO tables
Regan Sarwas
@ReganSarwas Gracias por el aviso. He editado la pregunta para abordar sus comentarios. La idea principal aquí es que esta es una solución alternativa y más simple que la conversión a csv.
Aaron
7

ArcGIS ya tiene una herramienta para hacer esto llamada " Exportar atributos de entidad a ASCII " que se encuentra en el cuadro de herramientas Estadísticas espaciales -> Utilidades.

La ventaja de esta herramienta sobre "Tabla a tabla" es que puede 1) definir su delimitador (espacio, coma, tabulación), 2) elegir los campos que desea exportar y 3) elegir si desea exportar o no sus nombres de campo a El archivo CSV. También es un script de Python, por lo que puede copiar ese archivo y crear su propia variante muy fácilmente.

Por lo tanto, si desea crear un modelo o script para exportar solo las características más recientes basadas en el "último campo de fecha de edición", simplemente preceda la herramienta "Exportar atributos de características a ASCII" con una herramienta "Seleccionar capa por atributo" donde llame fuera de la consulta que desea ejecutar.

RyanKDalton
fuente
3
Si bien responde estrictamente la pregunta tal como se publicó, vale la pena señalar que la herramienta solo admite clases de entidad, no tablas ...
jburka
3

Digamos que tiene un archivo GDB llamado treedn.gdbcon una tabla llamada treesy desea exportar a un CSV llamado trees.csv.

Puedes hacer algo similar a esto:

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

Todo el artículo se encuentra aquí .

Blairg23
fuente
1

ArcGIS 10.3 tiene una nueva función ConvertTableToCsvFile_roads para convertir una tabla en un archivo CSV. Esto es bastante sencillo 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")

Vea aquí el documento completo.

Tenga en cuenta que necesita una licencia de la caja de herramientas Carreteras y autopistas para usarla. Desde la versión 10.4, se llama a esta función ConvertTableToCsvFile_locref.

julien
fuente