arcpy.Delete_management não excluindo uma pasta de geodatabase

8

Esse script funciona bem na primeira vez, mas falha quando é executado na segunda vez. Parece que a instrução KMLToLayer_conversion cria um banco de dados geográfico de arquivo (sem surpresa) que não pode ser excluído posteriormente, mesmo quando a classe de recurso é removida do mapa, o arquivo de camada é excluído e o conteúdo do banco de dados geográfico é excluído. Eu gostaria de me limpar quando esse script terminar com todos os rastreamentos que não sejam as novas classes de recursos do MasterGDB. O problema é que esse script pode ser executado apenas uma vez, a menos que você saia do ArcMap, exclua manualmente a pasta no Windows e reinicie o ArcMap. A execução de comandos individuais na janela do Python mostra inevitavelmente um "", mas o diretório para o geodatabase permanece. Então, o que esse novato está perdendo aqui? (Neste script de teste / depuração, há apenas um único arquivo KML "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)
Tyla
fonte
tente adicionar arcpy.env.overwriteOutput = True e del wks, KMZ, ... talvez ele ajuda
user7172
Use RefreshCatalog antes de excluir a pasta help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//...
Irfan
Obrigado por seus comentários. O "overwriteOutput" em particular é uma jóia. O RefreshCatalog não pareceu ter nenhum impacto no problema. Por outro lado, o código original funcionou bem esta manhã, com a nova linha overwriteOutput. Eu suspeito que a reinicialização do sistema fazia parte da mágica (suspiro). Agora, para transformá-lo em uma versão "del" da versão de produção incluída.
Tyla

Respostas:

4

Seu nível de identificação precisa ser recuado para:

arcpy.Delete_management(fgdb)

fgdb é um item dentro do seu loop que não pode ser acessado como referência agora.

Tentar:

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")
artwork21
fonte
-2

Descobri que a seguinte chamada de exclusão é concluída corretamente.

if arcpy.Exists(fcName):
   arcpy.Delete_management(fcName)
sandyc
fonte
2
Não tenho certeza de como isso responde à pergunta do OP.
Devdatta Tengshe
1
Adicionar a if arcpy.Existspeça não faz com Delete_managementque funcione se já estiver falhando por algum motivo. (Só tentei e verificados.)
Erica