Suite

Pourquoi arcpy.ListFeatureClasses() prend-il si longtemps ?

Pourquoi arcpy.ListFeatureClasses() prend-il si longtemps ?


J'ai un problème où appeler arcpy.ListFeatureClasses() dans un espace de travail avec 400 shapefiles prend beaucoup de temps (plus de 10 minutes).

En utilisant lesystème d'exploitationmodule pour obtenir le même effet prend moins d'une seconde :

import os allSingleNonRoadPolys = [] for file in os.listdir(r'D:dataallSingleNonRoadPolys'): if file.endswith(".shp"): print(file) allSingleNonRoadPolys.append(file)

Vous pouvez alors obtenir le même effet queListFeatureClassesen ajoutant simplement l'espace de travail au nom du fichier, chaque fois que vous devez utiliser un ensemble de données, comme on le voit ici :

pour shp dans allSingleNonRoadPolys : arcpy.someTool(workspace + '' + shp)

Pourquoi continuerais-je à utiliserListFeatureClasses()et qu'est-ce qui fait que ça dure si longtemps ? Fait-il quelque chose d'incroyablement utile qui ne peut être réalisé d'une autre manière ?


Êtes-vous sûr que c'estarcpy.ListFeatureClasses()ça prend tellement de temps ? Serait-ce un autre morceau de code? Vérifiez avec le profileur avec juste un os.time factice comme indiqué ici.

Sur le disque SSD (2 ans, très utilisé quotidiennement), learcpy.ListFeatureClasses()renvoie la liste des ~800 shapefiles trouvés dans le dossier spécifié en moins de 5 secondes (juste testé). La taille totale du dossier est d'environ 6 Go. Je pensais que si vous aviez des fichiers de formes volumineux (plus de 100 Mo chacun et votre dossier de 40 Go), cela aurait pu ralentir la course. Pourtant, le temps d'exécution est le même pour un dossier d'environ 40 Go avec une centaine de fichiers de formes et les performances étaient identiques à ce que j'ai observé avec le plus grand nombre de fichiers de formes de plus petite taille.

N'oubliez pas que vous pouvez limiter votre recherche par nom, type d'entité et jeu de classes d'entités facultatif. Ceci est utile si vous n'avez pas besoin de répertorier toutes vos classes d'entités (shapefiles).

Pourquoi continuerais-je à utiliser ListFeatureClasses()

Vous auriez besoin d'utiliserarcpy.ListFeatureClasses()pour travailler dans n'importe quel espace de travail Esri (tel qu'un fichier ou une géodatabase multi-utilisateurs). Bien sûr, vous êtes libre d'utiliser d'autres méthodes pour répertorier vos fichiers de formes (car il s'agit d'un format de fichier ouvert avec lequel interagir), mais vous devrez revenir ultérieurement à cette fonction lorsque vous travaillerez avec tout élément stocké dans un référentiel Esri.