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)
sumber
Jawaban:
Level identifikasi Anda perlu diindentasi untuk:
fgdb adalah item dalam loop Anda yang rujukannya tidak dapat diakses seperti yang Anda miliki sekarang.
Mencoba:
sumber
Saya telah menemukan bahwa panggilan penghapusan berikut selesai dengan benar ..
sumber
if arcpy.Exists
bagian tidakDelete_management
akan berfungsi jika sudah gagal karena suatu alasan. (Baru dicoba dan diverifikasi.)