arcpy.Delete_man quản lý không xóa thư mục geodatabase


8

Kịch bản này chạy tốt lần đầu tiên nhưng thất bại khi chạy lần thứ hai. Vấn đề dường như là câu lệnh KMLToLayer_conversion tạo ra một cơ sở dữ liệu địa lý tệp (không có gì bất ngờ) mà sau đó không thể xóa ngay cả khi lớp tính năng bị xóa khỏi bản đồ, tệp lớp bị xóa và nội dung cơ sở dữ liệu địa lý bị xóa. Tôi muốn tự dọn dẹp khi kịch bản này được thực hiện với tất cả các dấu vết khác với các lớp tính năng mới trong MasterGDB. Vấn đề là tập lệnh này chỉ có thể được chạy một lần trừ khi bạn thoát ArcMap, xóa thủ công thư mục trong Windows, sau đó khởi động lại ArcMap. Chạy các lệnh riêng lẻ trong cửa sổ Python chắc chắn sẽ hiển thị "" nhưng thư mục cho cơ sở dữ liệu địa lý vẫn còn. Vì vậy, những gì người mới này mất tích ở đây? (Trong tập lệnh kiểm tra / gỡ lỗi này, chỉ có một tệp KML duy nhất "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)

hãy thử thêm arcpy.env.overwriteOutput = True và del wks, kmz, ... có thể nó sẽ giúp
user7172

Sử dụng RefreshCatalog trước khi xóa thư mục help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//...
Irfan

Cảm ơn cả hai bình luận của bạn. "OverwriteOutput" nói riêng là một viên ngọc. RefreshCatalog dường như không có bất kỳ tác động nào đến vấn đề này. Mặt khác, mã gốc đã hoạt động tốt vào sáng nay, với dòng ghi đè mới. Tôi nghi ngờ việc khởi động lại hệ thống là một phần của phép thuật (thở dài). Bây giờ để biến nó thành một tuyên bố "del" phiên bản sản xuất bao gồm.
Tyla

Câu trả lời:


4

Cấp độ nhận dạng của bạn cần được thụt lề cho:

arcpy.Delete_management(fgdb)

fgdb là một mục trong vòng lặp của bạn mà tham chiếu của nó không thể được truy cập như thế nào bạn có nó ngay bây giờ.

Thử:

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")

-2

Tôi thấy rằng các cuộc gọi xóa sau đây hoàn thành chính xác ..

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

2
Tôi không chắc làm thế nào điều này trả lời câu hỏi của OP.
Devdatta Tengshe

1
Thêm if arcpy.Existsphần không có lý do Delete_managementđể hoạt động nếu nó đã thất bại vì một số lý do. (Chỉ cần thử và xác minh.)
Erica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.