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)
fonte
Respostas:
Seu nível de identificação precisa ser recuado para:
fgdb é um item dentro do seu loop que não pode ser acessado como referência agora.
Tentar:
fonte
Descobri que a seguinte chamada de exclusão é concluída corretamente.
fonte
if arcpy.Exists
peça não faz comDelete_management
que funcione se já estiver falhando por algum motivo. (Só tentei e verificados.)