8 votos

arcpy.Delete_management no elimina una carpeta de geodatabase

Esta secuencia de comandos se ejecuta bien el primer tiempo, pero produce un error cuando se ejecuta el segundo tiempo. El problema parece ser que el KMLToLayer_conversion instrucción crea una geodatabase de archivos (ninguna sorpresa), que posteriormente no pueden ser eliminados, incluso cuando la clase de entidad se quita del mapa, la capa de archivo es eliminado, y la geodatabase contenido se elimina. Me gustaría limpiar después de mí mismo cuando esta secuencia de comandos se hace con todos los rastros ido a otros, a continuación, la nueva característica de clases dentro de MasterGDB. El problema es que este script sólo se puede ejecutar una vez, a menos que salga de ArcMap, eliminar manualmente la carpeta de Windows, a continuación, volver a iniciar ArcMap. Ejecución de los comandos individuales dentro de la ventana de Python, inevitablemente, se muestra un "" pero el directorio de la geodatabase se mantiene. Así que lo que este novato que falta aquí? (En esta prueba y depuración de secuencia de comandos, sólo hay un único archivo KML "C:\Temp\KKKLLL.KML" -- que convierte muy bien).

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)

4voto

Hameno Puntos 129

Su nivel de identificación debe estar sangrado para:

 arcpy.Delete_management(fgdb)
 

fgdb es un elemento dentro de su bucle al que no se puede acceder a su referencia como lo tiene ahora.

Tratar:

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

arcpy.Delete_management(fcCopy)
arcpy.Delete_management("C:\\Temp\\Muledeer\\KKKLLL.lyr")
 

-2voto

pollenstein Puntos 11

He encontrado que la siguiente llamada de eliminación completa correctamente ...

 if arcpy.Exists(fcName):
   arcpy.Delete_management(fcName)
 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X