このスクリプトは最初は正常に実行されますが、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