Suite

Arcpy.Delete_management() ne supprime pas le dossier ?

Arcpy.Delete_management() ne supprime pas le dossier ?


J'ai écrit un script en Python qui prend deux fichiers ascii qui représentent des surfaces, puis les convertit en rasters, et enfin annule leurs valeurs (c'est-à-dire multiplie toutes les cellules par -1). Dans le script, je crée un dossier temporaire pour stocker les données intermédiaires et j'aimerais le supprimer une fois le script exécuté, mais arcpy.Delete_management ne fonctionne pas. Mon code est le suivant :

import os, arcpy from arcpy.sa import * inputInterp = arcpy.GetParameterAsText(0) inputDiff = arcpy.GetParameterAsText(1) outputDir = arcpy.GetParameterAsText(2) #Ascii to Raster Conversion, stocke la sortie dans l'emplacement temporaire arcpy.env.overwriteOutput = True arcpy.env.workspace = outputDir tempFolder = outputDir + os.path.sep + "pyOut" arcpy.CreateFolder_management(arcpy.env.workspace, "pyOut") outInterp = tempFolder + os.path.sep + "Interp_Rast" outDiff = tempFolder + os.path.sep + "Diff_Rast" dtype = "FLOAT" arcpy.ASCIIToRaster_conversion(inputInterp, outInterp, dtype) arcpy.ASCIIToRaster_conversion(inputDiff, outDiff, dtype) #Inverser les rasters à leurs valeurs d'origine outIntNegate = Negate(out ) outDiffNegate = Negate(outDiff) #Cleanup arcpy.Delete_management(tempFolder)

Maintenant, voici la partie que je ne comprends pas. Si j'ajoute :

arcpy.Delete_management(outIntNegate) arcpy.Delete_management(outDiffNegate)

Juste avant:

arcpy.Delete_management(tempFolder)

Ensuite, tempFolder est supprimé comme prévu. Je prévois d'étendre ce script après avoir fait fonctionner cette partie et je ne veux vraiment pas supprimer chaque variable temporaire que je crée. Je soupçonne que cela a quelque chose à voir avec l'espace de travail, mais je n'ai trouvé aucune solution après avoir parcouru des articles similaires. Des idées?


Je pense qu'il s'agit d'un problème avec ArcGIS ayant des descripteurs de fichiers ouverts sur les fichiers de votre dossier temporaire.

Comme découvert dans nos commentaires, vous pouvez supprimer les variables Python, puis utiliser l'outil Supprimer pour supprimer le répertoire temporaire (mais pas ledelinstruction, qui supprime simplement la variable), mais vous devrez toujours supprimer explicitement chaque objet de résultat…

Pour éviter d'avoir à tout supprimer explicitement, vous pouvez tout mettre dans une méthode, puis appeler cette méthode. Lorsque la méthode revient, tout ce qui se trouve dans sa portée est automatiquement supprimé.

Remarque : cet exemple n'est pas vraiment idéal car il passe des variables dans la portée globale au lieu d'utiliser des arguments/valeurs de retour, mais c'est très simple.

import os, arcpy from arcpy.sa import * inputInterp = arcpy.GetParameterAsText(0) inputDiff = arcpy.GetParameterAsText(1) outputDir = arcpy.GetParameterAsText(2) #Ascii to Raster Conversion, stocke la sortie dans l'emplacement temporaire arcpy.env.overwriteOutput = True arcpy.env.workspace = outputDir tempFolder = outputDir + os.path.sep + "pyOut" arcpy.CreateFolder_management(arcpy.env.workspace, "pyOut") # Définir une méthode pour que les résultats soient dans une portée interne def raster_operations() : outInterp = tempFolder + os.path.sep + "Interp_Rast" outDiff = tempFolder + os.path.sep + "Diff_Rast" dtype = "FLOAT" arcpy.ASCIIToRaster_conversion(inputInterp, outInterp, dtype) arcpy.ASCIIToRaster_conversion(in , outDiff, dtype) #Inverser les rasters à leurs valeurs d'origine outIntNegate = Negate(outInterp) outDiffNegate = Negate(outDiff) # Appeler la méthode définie ci-dessus raster_operations() #Cleanup arcpy.Delete_management(tempFolder)

Voir la vidéo: 13 - Update Cursors - ArcMap Scripting with Python and Arcpy