Python-Skript zum Exportieren von CSV-Tabellen aus GDB

8

Ich bin sehr neu in der Python-Programmierung und wurde beauftragt, ein Programm zum Exportieren einer CSV-Datei aus einer File-Geodatabase-Feature-Class zu schreiben. Die CSV sollte nur bestimmte Felder enthalten und die exportierten Datensätze sollten auf dem Datum der letzten Bearbeitung basieren. Mit anderen Worten, die CSV-Datei wird täglich erstellt und enthält nur die letzten Funktionen, die basierend auf dem Feld "Datum der letzten Bearbeitung" hinzugefügt wurden.

Ich habe das bisher:

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

Es exportiert jedoch alles.

user35267
quelle
Wie postest du was du bisher hast? Neu bei Stackexchange auch
user35267
2
Ich denke, was Brachvogel bedeutet, ist, dass Sie einen Code in Ihre Frage einfügen (Ihre Frage bearbeiten), damit er zeigt, dass Sie dies versucht haben, und dann können wir Ihnen helfen, herauszufinden, wo Sie möglicherweise falsch liegen (also nicht) Anscheinend versuchen Sie nur, die Community dazu zu bringen, ein Skript für Sie zu schreiben.
jbchurchill

Antworten:

10

Eine einfachere Lösung wäre die Konvertierung in das DBF-Dateiformat. In diesem Fall können Sie die sofort einsatzbereite Tabelle in Tabelle (Konvertierung) verwenden . Mit diesem Tool können Sie auch frei auswählen, welche Felder als FieldMappings aufgenommen werden sollen, und eine DBF-Datei direkt ausgeben.

import arcpy

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

arcpy.TableToTable_conversion (fc, outws, 'outFile.dbf')
Aaron
quelle
6
-1 Dadurch wird eine Datenbankdatei mit dem Namen outFile.dbf erstellt, keine CSV-Datei. Die Ausgabe von CSV-Dateien wird nicht unterstützt. Gemäß den Dokumenten, auf die verwiesen wird: This tool can convert input tables to dBASE (.dbf), geodatabase (personal, file, or SDE), or INFO tables
Regan Sarwas
@ReganSarwas Danke für das Heads-up. Ich habe die Frage bearbeitet, um Ihre Kommentare zu beantworten. Die Hauptidee hier ist, dass dies eine alternative, einfachere Lösung ist als die Konvertierung in CSV.
Aaron
7

ArcGIS verfügt bereits über ein Tool namens " Feature-Attribute nach ASCII exportieren ", das sich in der Toolbox "Raumstatistik -> Dienstprogramme" befindet.

Der Vorteil dieses Tools gegenüber "Tabelle zu Tabelle" besteht darin, dass Sie 1) Ihr Trennzeichen (Leerzeichen, Komma, Tabulator) definieren, 2) die zu exportierenden Felder auswählen und 3) auswählen können, ob Ihre Feldnamen exportiert werden sollen oder nicht die CSV-Datei. Es ist auch ein Python-Skript, sodass Sie diese Datei kopieren und ganz einfach Ihre eigene Variante davon erstellen können.

Wenn Sie also ein Modell oder Skript erstellen möchten, um nur die neuesten Features basierend auf dem Feld "Datum der letzten Bearbeitung" zu exportieren, stellen Sie dem Tool "Feature-Attribute nach ASCII exportieren" einfach das Tool "Layer nach Attribut auswählen" voran, das Sie aufrufen aus der Abfrage, die Sie ausführen möchten.

RyanKDalton
quelle
3
Bei der strikten Beantwortung der gestellten Frage ist zu beachten, dass das Tool nur Feature-Classes unterstützt, keine Tabellen ...
jburka
3

Angenommen, Sie haben eine GDB-Datei treedn.gdbmit einer aufgerufenen Tabelle treesund möchten in eine aufgerufene CSV exportieren trees.csv.

Sie können etwas Ähnliches tun:

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

Der gesamte Artikel befindet sich hier .

Blairg23
quelle
1

ArcGIS 10.3 verfügt über eine neue Funktion ConvertTableToCsvFile_roads zum Konvertieren einer Tabelle in eine CSV-Datei. Dies ist recht einfach zu bedienen:

import arcpy
from arcpy import env

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

Siehe hier das vollständige Dokument.

Beachten Sie, dass Sie eine Toolbox-Lizenz für Straßen und Autobahnen benötigen , um diese zu nutzen. Ab Version 10.4 wird diese Funktion aufgerufen ConvertTableToCsvFile_locref.

julien
quelle