Catatan: Sementara pertanyaan ini memiliki jawaban, kiat-kiat lebih lanjut untuk mengoptimalkan proses kursor akan sangat dihargai. Saya akan memantau setiap pembaruan.
Saat ini, bos saya (yang bekerja di Avenue) dan saya (bekerja dengan Python) sama-sama berusaha menyelesaikan masalah yang sama. Sebaliknya, kami berdua telah memecahkannya, tetapi kecepatan di mana solusi kami beroperasi ... terputus-putus, untuk sedikitnya. Apa yang proses skripnya dalam 2 jam dapat menambang hingga 6. Satu-satunya perbedaan nyata dalam sintaksis dan implementasi dalam logika berasal dari Bitmap 3.x dan Cursors 10.x. Kami berdua:
1) Simpan nilai dari Tabel 1.
2) Gunakan nilai-nilai itu untuk kueri baris di Tabel 2.
3) Simpan nilai dari Tabel 2 untuk dimasukkan ke dalam Tabel 3 sebagai baris baru.
Dalam kedua skrip, proses ini diselesaikan dalam dua loop bersarang. Sebelum saya mulai menggali dunia yang luar biasa dari optimasi kode, apakah ini kejadian yang diharapkan ketika membandingkan kinerja skrip Avenue ke Python? Ini bukan pertama kalinya skripnya mengungguli skrip saya dalam hal waktu operasi, jadi saya ingin tahu apakah ada sesuatu yang harus saya ketahui sebelum saya menyalibkan diri saya untuk skrip yang mengerikan.
Inilah skrip saya tanpa bit:
import arcpy
import time
import sys
import os
def recordfindcopy(inFile,query,outFile):
findRecord = arcpy.SearchCursor(inFile,query)
for record in findRecord:
copyRecord = arcpy.InsertCursor(outData) # <--- D'oh! (See answer)
field = record.FIELD
copy = copyRecord.newRow()
copy.FIELD = field
copyRecord.insertRow(copy)
StreetsFileList = [r"Path",
r"Path"]
for sfile in StreetsFileList:
inStreets = sfile
inTable = r"Path"
outData = r"Path"
fsaEntry = arcpy.SearchCursor(inTable)
for row in fsaEntry:
id = row.ID
sQuery = "ID = %s " % (str(id))
recordfindcopy(inStreets,sQuery,outData)
EDIT : Mengingat beberapa komentar sejauh ini, saya bertanya-tanya apakah mungkin ada cara yang lebih baik untuk melakukan ini melalui bergabung, meskipun saya meragukan mengingat ukuran tabel brobdingnagian (kata hari ini!). Inti dari pemrosesan adalah menambahkan informasi dari satu tabel ke catatan yang cocok di tabel kedua dan membuat tabel ketiga hanya berisi bidang-bidang penting. Saya ingin mencoba ini menggunakan SDE, tetapi itu tampaknya bukan pilihan yang tersedia. Pikiran? Saya minta maaf jika pertanyaan saya selalu begitu terlibat , tetapi saya mencoba untuk sampai ke dasar gangguan lama.
Dijawab : Saran sederhana Jakub sendiri mengurangi waktu pemrosesan dari 30 detik per 500 catatan menjadi 3 detik per 500 catatan. Memulai kembali kursor sisipan pada setiap sisipan memperlambat banyak hal (jelas). Meskipun ini mungkin bukan yang paling optimal yang dapat dilakukan untuk proses ini ketika dihadapkan dengan kecepatan ArcView 3.x, itu sudah cukup untuk keperluan saya saat ini. Saran lebih lanjut sangat disambut!