Tập lệnh Python để xuất các bảng .csv từ GDB


8

Tôi rất mới với lập trình Python và đã được giao nhiệm vụ viết chương trình để xuất tệp csv từ lớp tính năng cơ sở dữ liệu địa lý tệp. Cvv chỉ nên chứa một số trường nhất định và các bản ghi được xuất phải dựa trên ngày chỉnh sửa cuối cùng. Nói cách khác, tệp csv sẽ được tạo trên cơ sở hàng ngày chỉ chứa các tính năng cuối cùng được thêm vào dựa trên "trường ngày chỉnh sửa cuối cùng".

Tôi có cái này cho đến nay:

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

Tuy nhiên nó xuất khẩu mọi thứ.


Làm thế nào để bạn đăng những gì bạn có cho đến nay? Mới tham gia stackexchange
dùng35267

2
Tôi nghĩ ý nghĩa của Curlew là bạn nên đặt một số mã trong câu hỏi của bạn (chỉnh sửa câu hỏi của bạn) để nó cho thấy rằng bạn đã cố gắng làm điều này và sau đó chúng tôi có thể giúp bạn tìm ra nơi bạn có thể sai (vì vậy nó không có vẻ như bạn chỉ đang cố gắng để cộng đồng viết kịch bản cho bạn).
jbeclill

Câu trả lời:


10

Một giải pháp đơn giản hơn là chuyển đổi sang định dạng tệp dbf, trong trường hợp đó bạn có thể sử dụng Bảng sang bảng (Chuyển đổi) bên ngoài . Công cụ này cũng cho phép bạn tự do chọn các trường để đưa vào như FieldMappings cũng như trực tiếp xuất ra tệp .dbf.

import arcpy

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

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

6
-1 Điều này tạo ra một tệp dbf được gọi là outFile.dbf, không phải là tệp csv. Đầu ra tập tin Csv không được hỗ trợ. Theo các tài liệu tham khảo: This tool can convert input tables to dBASE (.dbf), geodatabase (personal, file, or SDE), or INFO tables
Regan Sarwas

@ReganSarwas Cảm ơn bạn đã ủng hộ. Tôi đã chỉnh sửa câu hỏi để giải quyết ý kiến ​​của bạn. Ý tưởng chính ở đây là đây là một giải pháp thay thế, đơn giản hơn là chuyển đổi sang csv.
Aaron

7

ArcGIS đã có một công cụ để thực hiện việc này gọi là " Xuất các thuộc tính tính năng sang ASCII " trong hộp công cụ Thống kê không gian -> Tiện ích.

Ưu điểm của công cụ này so với "Bảng thành bảng" là bạn có thể 1) xác định dấu phân cách (dấu cách, dấu phẩy, tab), 2) chọn các trường bạn muốn xuất và 3) chọn có hay không xuất tên trường của bạn tệp CSV. Nó cũng là một tập lệnh Python, vì vậy bạn có thể sao chép tệp đó và tạo biến thể của riêng bạn rất dễ dàng.

Vì vậy, nếu bạn muốn tạo một mô hình hoặc tập lệnh để chỉ xuất các tính năng gần đây nhất dựa trên "trường ngày chỉnh sửa cuối cùng", chỉ cần đặt trước công cụ "Xuất thuộc tính tính năng sang ASCII" bằng công cụ "Chọn lớp theo thuộc tính" nơi bạn gọi ra truy vấn bạn muốn chạy


3
Trong khi trả lời đúng câu hỏi như đã đăng, điều đáng chú ý là công cụ này chỉ hỗ trợ các lớp tính năng, không phải bảng ...
jburka

3

Giả sử bạn có tệp GDB được gọi treedn.gdbvới bảng được gọi treesvà bạn muốn xuất sang CSV được gọi trees.csv.

Bạn có thể làm một cái gì đó tương tự như thế này:

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

toàn bộ bài viết nằm ở đây .


1

ArcGIS 10.3 có chức năng mới ConvertTableToCsvFile_roads để chuyển đổi bảng thành tệp CSV. Điều này khá đơn giản để sử dụng:

import arcpy
from arcpy import env

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

Xem ở đây tài liệu đầy đủ.

Xin lưu ý rằng bạn cần giấy phép hộp công cụ Đường bộ và Đường cao tốc để sử dụng. Từ phiên bản 10.4, chức năng này được gọi ConvertTableToCsvFile_locref.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.