Dieses Skript wird beim ersten Mal einwandfrei ausgeführt, schlägt jedoch beim zweiten Ausführen fehl. Das Problem scheint zu sein, dass die Anweisung KMLToLayer_conversion eine Datei-Geodatabase erstellt (keine Überraschung), die anschließend nicht gelöscht werden kann, selbst wenn die Feature-Class aus der Karte entfernt, die Layer-Datei gelöscht und der Inhalt der Geodatabase gelöscht wird. Ich möchte nach mir selbst aufräumen, wenn dieses Skript mit allen Spuren außer den neuen Feature-Classes in MasterGDB fertig ist. Das Problem ist, dass dieses Skript nur einmal ausgeführt werden kann, es sei denn, Sie beenden ArcMap, löschen den Ordner in Windows manuell und starten ArcMap neu. Wenn Sie die einzelnen Befehle im Python-Fenster ausführen, wird zwangsläufig ein "" angezeigt, das Verzeichnis für die Geodatabase bleibt jedoch erhalten. Was fehlt diesem Neuling hier? (In diesem Test- / Debug-Skript gibt es nur eine einzige KML-Datei "C:
import arcpy, os
# Name: BatchKML_to_GDB.py
# Source: AS16818.ZIP from acripts.esri.com
import arcpy, os
# Set local variables and location for the consolidated file geodatabase
KMLDir = "C:\TEMP\KML3"
outLocation = "C:\\Temp\\MuleDeer"
MasterGDB = 'AllKLM5.gdb'
MasterGDBLocation = os.path.join(outLocation, MasterGDB)
# Create the master FileGeodatabase as needed
if not (arcpy.Exists(MasterGDBLocation)):
print MasterGDBLocation + " doesn't exist; creating it now"
arcpy.CreateFileGDB_management(outLocation, MasterGDB)
# Convert all KMZ and KML files found in the current workspace
# Set workspace (where all the KMLs are)
arcpy.env.workspace=KMLDir
for kmz in arcpy.ListFiles('*.KM*'):
print "CONVERTING: " + os.path.join(arcpy.env.workspace,kmz)
kmz2 = os.path.join(arcpy.env.workspace,kmz)
arcpy.KMLToLayer_conversion(kmz2, outLocation)
print "Done"
# Change the workspace to fGDB location
arcpy.env.workspace = outLocation
# Loop through all the FileGeodatabases within the workspace
wks = arcpy.ListWorkspaces('*', 'FileGDB')
# Drop Master GDB from the array/list
wks.remove(MasterGDBLocation)
for fgdb in wks:
# Change the workspace to the current FileGeodatabase
arcpy.env.workspace = fgdb
featureClasses = arcpy.ListFeatureClasses('*', '', 'Palacemarks')
for fc in featureClasses:
fcCopy = fgdb + os.sep + 'Placemarks' + os.sep + fc
arcpy.FeatureClassToFeatureClass_conversion(fcCopy, MasterGDBLocation, fgdb[fgdb.rfind(os.sep)+1:-4])
arcpy.Delete_management(fcCopy)
arcpy.Delete_management("C:\\Temp\\Muledeer\\KKKLLL.lyr")
arcpy.Delete_management(fgdb)
quelle
Antworten:
Ihre Identifikationsstufe muss eingerückt sein für:
fgdb ist ein Element in Ihrer Schleife, auf dessen Referenz nicht zugegriffen werden kann, wie Sie es jetzt haben.
Versuchen:
quelle
Ich habe festgestellt, dass der folgende Löschaufruf korrekt ausgeführt wird.
quelle
if arcpy.Exists
Teils funktioniert nichtDelete_management
, wenn es aus irgendeinem Grund bereits fehlschlägt. (Nur versucht und verifiziert.)