Skrip python untuk mengekspor tabel .csv dari GDB


8

Saya sangat baru dalam pemrograman Python dan telah ditugaskan untuk menulis sebuah program untuk mengekspor file csv dari kelas fitur file geodatabase. CSV hanya boleh berisi bidang tertentu dan catatan yang diekspor harus didasarkan pada tanggal edit terakhir. Dengan kata lain file csv akan dibuat pada basis harian yang hanya berisi fitur terakhir yang ditambahkan berdasarkan "bidang tanggal edit terakhir".

Saya punya ini sejauh ini:

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

Namun itu mengekspor segalanya.


Bagaimana Anda memposting apa yang Anda miliki sejauh ini? Baru di
stackexchange

2
Saya pikir apa yang dimaksud Curlew adalah bahwa Anda harus memasukkan beberapa kode dalam pertanyaan Anda (edit pertanyaan Anda) sehingga itu menunjukkan bahwa Anda telah mencoba melakukan ini dan kemudian kami dapat membantu Anda mencari tahu di mana Anda mungkin salah (jadi itu tidak Tampaknya Anda hanya berusaha membuat komunitas menulis skrip untuk Anda).
jbchurchill

Jawaban:


10

Solusi yang lebih sederhana adalah mengonversi ke format file dbf, dalam hal ini Anda dapat menggunakan Table to Table (Konversi) yang out-of-the-box . Alat ini juga memberi Anda kebebasan untuk memilih bidang mana yang akan dimasukkan sebagai FieldMappings serta langsung menghasilkan file .dbf.

import arcpy

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

arcpy.TableToTable_conversion (fc, outws, 'outFile.dbf')

6
-1 Ini menciptakan file dbf yang disebut outFile.dbf, bukan file csv. Output file Csv tidak didukung. Per dokumen yang dirujuk: This tool can convert input tables to dBASE (.dbf), geodatabase (personal, file, or SDE), or INFO tables
Regan Sarwas

@ReganSar terimakasih untuk informasi lebih lanjut. Saya telah mengedit pertanyaan untuk menanggapi komentar Anda. Gagasan utama di sini adalah bahwa ini adalah alternatif, solusi yang lebih sederhana daripada mengkonversi ke csv.
Aaron

7

ArcGIS sudah memiliki alat untuk melakukan ini yang disebut " Atribut Fitur Ekspor ke ASCII " yang ada di Statistik Spatial -> Utilities toolbox.

Keuntungan dari alat ini daripada "Table to Table" adalah Anda dapat 1) mendefinisikan pembatas Anda (spasi, koma, tab), 2) memilih bidang yang ingin Anda ekspor dan 3) memilih apakah akan mengekspor nama bidang Anda atau tidak ke file CSV. Ini juga merupakan skrip Python, sehingga Anda dapat menyalin file itu dan membuat varian sendiri dengan sangat mudah.

Jadi, jika Anda ingin membuat model atau skrip untuk mengekspor hanya fitur terbaru berdasarkan pada "bidang edit tanggal terakhir", cukup mendahului alat "Ekspor Atribut Fitur ke ASCII" dengan alat "Pilih Lapisan menurut Atribut" di mana Anda memanggil keluar permintaan yang ingin Anda jalankan.


3
Sambil dengan ketat menjawab pertanyaan seperti yang diposting, patut dicatat bahwa alat ini hanya mendukung kelas fitur, bukan tabel ...
jburka

3

Katakanlah Anda memiliki file GDB yang dipanggil treedn.gdbdengan tabel yang dipanggil treesdan Anda ingin mengekspor ke CSV yang dipanggil trees.csv.

Anda dapat melakukan sesuatu yang mirip dengan ini:

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

seluruh artikel ada di sini .


1

ArcGIS 10.3 memiliki fungsi baru ConvertTableToCsvFile_roads untuk mengubah tabel menjadi file CSV. Ini cukup mudah digunakan:

import arcpy
from arcpy import env

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

Lihat di sini dokumen lengkapnya.

Ketahuilah bahwa Anda memerlukan lisensi Toolbox Jalan dan Jalan Raya untuk menggunakannya. Dari versi 10.4, fungsi ini disebut ConvertTableToCsvFile_locref.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.