arcpy.Delete_management tidak menghapus folder geodatabase

8

Skrip ini berjalan dengan baik pertama kali tetapi gagal saat dijalankan kedua kalinya. Masalahnya tampaknya bahwa pernyataan KMLToLayer_conversion membuat geodatabase file (tidak mengejutkan) yang selanjutnya tidak dapat dihapus bahkan ketika kelas fitur dihapus dari peta, file layer dihapus, dan konten geodatabase dihapus. Saya ingin membersihkan setelah saya sendiri ketika skrip ini dilakukan dengan semua jejak yang hilang selain kelas fitur baru dalam MasterGDB. Masalahnya adalah skrip ini hanya dapat dijalankan satu kali kecuali Anda keluar dari ArcMap, menghapus folder secara manual di Windows, kemudian memulai kembali ArcMap. Menjalankan perintah individual di dalam jendela Python mau tidak mau menunjukkan "" tetapi direktori untuk geodatabase tetap. Jadi, apa yang hilang dari pemula ini? (Dalam skrip uji / debug ini, hanya ada satu file 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
sumber
coba tambahkan arcpy.env.overwriteOutput = Benar dan del wks, kmz, ... mungkin itu membantu
user7172
Gunakan RefreshCatalog sebelum menghapus folder help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//…
iRfAn
Terima kasih atas kedua komentar Anda. "OverwriteOutput" khususnya adalah permata. RefreshCatalog tampaknya tidak berdampak pada masalah ini. Di sisi lain, kode asli berfungsi dengan baik pagi ini, dengan baris overwriteOutput yang baru. Saya menduga sistem reboot adalah bagian dari keajaiban (menghela nafas). Sekarang untuk mengubahnya menjadi pernyataan "del" versi produksi yang disertakan.
Tyla

Jawaban:

4

Level identifikasi Anda perlu diindentasi untuk:

arcpy.Delete_management(fgdb)

fgdb adalah item dalam loop Anda yang rujukannya tidak dapat diakses seperti yang Anda miliki sekarang.

Mencoba:

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
sumber
-2

Saya telah menemukan bahwa panggilan penghapusan berikut selesai dengan benar ..

if arcpy.Exists(fcName):
   arcpy.Delete_management(fcName)
sandyc
sumber
2
Saya tidak yakin bagaimana ini menjawab pertanyaan OP.
Devdatta Tengshe
1
Menambahkan if arcpy.Existsbagian tidak Delete_managementakan berfungsi jika sudah gagal karena suatu alasan. (Baru dicoba dan diverifikasi.)
Erica