Ich habe dieses Skript geschrieben, das alle Feature-Classes in einem bestimmten Satz von Feature-Datasets durchläuft und alle ihre Features löscht. Es scheint den Job zu machen, aber es läuft ziemlich langsam. Gibt es irgendetwas, was ich hier falsch mache, oder gibt es offensichtliche Möglichkeiten, die Dinge zu beschleunigen?
Ich benutze DeleteFeatures_management , um die Tat auszuführen . DeleteRows_management scheint ebenfalls zu funktionieren.
import sys
import os
import arcpy
from arcpy import env
import datetime
import getpass
try:
passwd = getpass.getpass("Enter the sde user password: ")
sdeConnectionFileDir = os.environ.get("TEMP")
databaseName = ""
fileName = "temp.sde"
# Delete any pre-existing SDE connection file.
fullPath = sdeConnectionFileDir + '\\' + fileName
if os.path.exists(fullPath):
os.remove(fullPath)
# Create temporary SDE connection file.
arcpy.CreateArcSDEConnectionFile_management (
sdeConnectionFileDir, fileName,
"sdeserver", "5151", "",
"DATABASE_AUTH", "my_sde_user", passwd,
"SAVE_USERNAME", "SDE.DEFAULT", "SAVE_VERSION"
)
env.workspace = fullPath
# ArcPy status codes.
returnCodes = {'WARN' : 0, 'INFO' : 1, 'ERROR' : 2}
featureDatasets = []
featureDatasets.extend(arcpy.ListDatasets("dataset1*"))
featureDatasets.extend(arcpy.ListDatasets("dataset2*"))
featureDatasets.extend(arcpy.ListDatasets("dataset3*"))
list = '[%s]' % ', '.join(map(str, featureDatasets))
response = raw_input("\n***** WARNING!!! ***** \nAll data will be deleted from all feature classess in the following datasets: \n\n" + list + "\n\n |--> Type DELETE to begin removal: ")
if response == "DELETE":
print "\nStarted: " + str(datetime.datetime.now()) + "\n"
for dataset in featureDatasets:
print "Processing dataset: " + dataset
for fc in arcpy.ListFeatureClasses("*", "ALL", dataset):
rowCount = int(arcpy.GetCount_management(fc).getOutput(0))
if rowCount > 0:
print " -- Processing feature class: " + str(fc) + " (" + str(rowCount) + " rows)"
#arcpy.DeleteRows_management(fc)
arcpy.DeleteFeatures_management(fc)
print "\nCompleted: " + str(datetime.datetime.now())
except Exception as e:
if arcpy:
arcpyErrors = arcpy.gp.getMessages(returnCodes['ERROR'])
if arcpyErrors:
sys.stderr.write(arcpyErrors + "\n")
sys.stderr.write(str(e) + "\n")
sys.exit(1)
BEARBEITEN -
Ich habe einige Performance-Timer in das Skript eingefügt und hier sind die Daten:
- Zeit zum Abrufen von Datensätzen: 0: 00: 01.254000
- Gesamtfeature-Klassen: 1682
- Gesamtzahl der Feature-Classes mit Daten: 124
- Verarbeitete Gesamtfunktionen: 190222
- Gesamtlaufzeit : 3 Stunden, 16 Minuten
Die Panne:
Feature-Dataset -> Feature-Class-Aufrufe auflisten:
* AVG 0:00:02
* MIN 0:00:01
* MAX 0:00:07
* COUNT 40
* TOTAL 0:01:08
Funktionsanzahlaufrufe (meistens):
* AVG 0:00:06
* MIN 0:00:01
* MAX 0:00:16
* COUNT 1682
* TOTAL 2:41:00
Aufrufe zum Löschen von Features (reduziert, da nur Feature-Classes mit Zeilen verarbeitet werden):
* AVG 0:00:17
* MIN 0:00:02
* MAX 0:03:22
* COUNT 124
* TOTAL 0:34:31
quelle
Wenn ein Upgrade auf ArcGIS 10.1 (jetzt veröffentlicht) möglich ist, habe ich dies gerade im PDF "Was ist neu in ArcGIS 10.1?" Gefunden:
Die Online-Hilfe finden Sie hier .
quelle
Warum nicht einfach die Feature-Datasets selbst löschen
arcpy.DeleteFeatures_management(dataset)
? Wenn das Feature-Dataset weiterhin vorhanden sein muss, können Sie es nach dem Löschen einfach neu erstellen.quelle