arcpy.Delete_managementがジオデータベースフォルダーを削除しない


8

このスクリプトは最初は正常に実行されますが、2回目に実行すると失敗します。問題は、KMLToLayer_conversionステートメントがファイルジオデータベースを作成すること(驚きではありません)であり、フィーチャクラスがマップから削除され、レイヤーファイルが削除され、ジオデータベースのコンテンツが削除されても削除できません。MasterGDB内の新しい機能クラス以外のすべてのトレースを使用してこのスクリプトが実行されたら、自分でクリーンアップしたいと思います。問題は、ArcMapを終了し、Windowsでフォルダーを手動で削除して、ArcMapを再起動しない限り、このスクリプトは1回しか実行できないことです。Pythonウィンドウ内で個々のコマンドを実行すると、必然的に「」が表示されますが、ジオデータベースのディレクトリは残ります。では、この初心者はここで何を失っていますか?(このテスト/デバッグスクリプトでは、単一の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)

追加をお試しくださいarcpy.env.overwriteOutput = Trueとdel wks、kmz、...それは役に立つかもしれません
user7172


両方のコメントをありがとう。特に「overwriteOutput」は逸品です。RefreshCatalogは、問題に影響を与えていないようです。一方、元のコードは今朝、新しいoverwriteOutput行で問題なく機能しました。システムの再起動は魔法の一部だったと思います(ため息)。次に、これを製品版の「del」ステートメントに変換します。
Tyla

回答:


4

識別レベルは、次のようにインデントする必要があります。

arcpy.Delete_management(fgdb)

fgdbはループ内のアイテムであり、現在の方法では参照にアクセスできません。

試してください:

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

次の削除呼び出しが正しく完了することがわかりました。

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

2
これがOPの質問にどのように答えるかはわかりません。
Devdatta Tengshe 2013年

1
if arcpy.Existsパーツを追加Delete_managementしても、何らかの理由で既に失敗している場合は機能しません。(試して確認しただけです。)
エリカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.