Script Python pour exporter des tables .csv depuis GDB

8

Je suis très nouveau dans la programmation Python et j'ai été chargé d'écrire un programme pour exporter un fichier csv à partir d'une classe d'entités de géodatabase fichier. Le fichier csv ne doit contenir que certains champs et les enregistrements exportés doivent être basés sur la dernière date de modification. En d'autres termes, le fichier csv sera créé sur une base quotidienne contenant uniquement les dernières fonctionnalités ajoutées en fonction du "dernier champ de date de modification".

J'ai ceci jusqu'à présent:

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

Cependant, tout est exporté.

user35267
la source
Comment publiez-vous ce que vous avez jusqu'à présent? Nouveau sur stackexchange également
user35267
2
Je pense que Curlew signifie que vous devez mettre du code dans votre question (modifier votre question) afin qu'il montre que vous avez essayé de le faire et que nous pouvons ensuite vous aider à déterminer où vous pouvez vous tromper (donc ce n'est pas le cas). il semble que vous tentiez simplement d'amener la communauté à écrire un script pour vous).
jbchurchill

Réponses:

10

Une solution plus simple serait de convertir au format de fichier dbf, auquel cas vous pouvez utiliser la table en table prête à l'emploi (conversion) . Cet outil vous permet également de sélectionner les champs à inclure en tant que FieldMappings ainsi que de générer directement un fichier .dbf.

import arcpy

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

arcpy.TableToTable_conversion (fc, outws, 'outFile.dbf')
Aaron
la source
6
-1 Cela crée un fichier dbf appelé outFile.dbf, pas un fichier csv. La sortie du fichier CSV n'est pas prise en charge. Selon les documents référencés: This tool can convert input tables to dBASE (.dbf), geodatabase (personal, file, or SDE), or INFO tables
Regan Sarwas
@ReganSarwas Merci pour l'avertissement. J'ai modifié la question pour répondre à vos commentaires. L'idée principale ici est qu'il s'agit d'une solution alternative plus simple que la conversion en csv.
Aaron
7

ArcGIS dispose déjà d'un outil pour ce faire appelé « Exporter les attributs d'entité vers ASCII » qui se trouve dans la boîte à outils Statistiques spatiales -> Utilitaires.

L'avantage de cet outil sur "Table à Table" est que vous pouvez 1) définir votre délimiteur (espace, virgule, tabulation), 2) choisir les champs que vous souhaitez exporter et 3) choisir d'exporter ou non les noms de vos champs vers le fichier CSV. Il s'agit également d'un script Python, vous pouvez donc copier ce fichier et en créer très facilement votre propre variante.

Donc, si vous souhaitez créer un modèle ou un script pour exporter uniquement les fonctionnalités les plus récentes en fonction du "dernier champ de date de modification", il suffit de faire précéder l'outil "Exporter les attributs de fonctionnalité vers ASCII" d'un outil "Sélectionner la couche par attribut" où vous appelez sur la requête que vous souhaitez exécuter.

RyanKDalton
la source
3
Tout en répondant strictement à la question telle que publiée, il convient de noter que l'outil ne prend en charge que les classes d'
entités
3

Disons que vous avez un fichier GDB appelé treedn.gdbavec une table appelée treeset que vous souhaitez exporter vers un CSV appelé trees.csv.

Vous pouvez faire quelque chose de similaire à ceci:

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

l'article entier se trouve ici .

Blairg23
la source
1

ArcGIS 10.3 possède une nouvelle fonction ConvertTableToCsvFile_roads pour convertir une table en fichier CSV. C'est assez simple à utiliser:

import arcpy
from arcpy import env

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

Voir ici le doc complet.

Sachez que vous avez besoin d'une licence de boîte à outils Roads and Highways pour l'utiliser. Depuis la version 10.4, cette fonction est appelée ConvertTableToCsvFile_locref.

julien
la source