Affichage des données

L'une des principales tâches effectuées dans le cadre d'un script de traitement par lots consiste à cataloguer les données disponibles afin de les explorer lors du traitement. ArcPy dispose de plusieurs fonctions créées spécifiquement pour la création de ces listes.

ListFields(jeu de données, caractère_générique, type_de_champ)

Retourne la liste des champs trouvés dans la valeur en entrée

ListIndexes(jeu de données, caractère_générique)

Retourne la liste des index attributaires trouvés dans la valeur en entrée

ListDatasets(caractère_générique, type_entité)

Retourne les jeux de données de l'espace de travail actuel

ListFeatureClasses(caractère_générique, type_entité)

Retourne les classes d'entités de l'espace de travail actuel

ListFiles(caractère_générique)

Retourne les fichiers de l'espace de travail actuel

ListRasters(caractère_générique, type_raster)

Retourne la liste des rasters trouvés dans l'espace de travail actuel

ListTables(caractère_générique, type_table)

Retourne la liste des tables trouvées dans l'espace de travail actuel

ListWorkspaces(caractère_générique, type_espace_de_travail)

Retourne la liste des espaces de travail trouvés dans l'espace de travail actuel

ListVersions(espace_de_travail_ArcSDE)

Retourne la liste des versions que l'utilisateur connecté est autorisé à utiliser

Fonctions de liste

Le résultat de chacune de ces méthodes est une liste Python, c'est-à-dire une liste de valeurs. Une liste dans un script peut contenir tout type de données, tel qu'une chaîne, pouvant représenter, par exemple, un chemin d'accès à un jeu de données, un champ ou une ligne dans une table. Lorsque la liste a été créée avec les valeurs de votre choix, vous pouvez la parcourir dans votre script pour utiliser chaque valeur individuelle.

Pour en savoir plus sur les outils de liste, les boîtes à outils et les paramètres d'environnement

Paramètres des fonctions de liste

Les paramètres de ces fonctions sont semblables. Certaines, comme la fonction ListFields, nécessitent une valeur de jeu de données en entrée car les éléments que ces fonctions répertorient figurent dans un certain objet ou jeu de données. D'autres fonctions ne nécessitent aucun jeu de données en entrée car elles répertorient les types de données présents dans l'espace de travail actuel et définis dans les paramètres d'environnement. Toutes les fonctions comportent un paramètre de caractère générique utilisé pour trier les objets ou jeux de données répertoriés par nom. Un caractère générique définit un filtre de nom, et tout le contenu de la liste qui vient d'être créée doit passer par ce filtre. Par exemple, vous pouvez répertorier toutes les classes d'entités d'un espace de travail commençant par la lettre G. L'exemple suivant montre comment effectuer cette opération :

import arcpy
from arcpy import env

# Set the workspace. List all of the feature classes that start with 'G'
#
env.workspace = "D:/St_Johns/data.gdb"
fcs = arcpy.ListFeatureClasses("G*")

La liste peut être également limitée à certaines propriétés de données telles que des classes d'entités surfaciques, des champs d'entiers ou des jeux de données de couverture. Le paramètre Type est utilisé pour cette opération dans toutes les fonctions. Dans l'exemple suivant, les classes d'entités d'un espace de travail sont filtrées à l'aide d'un caractère générique et d'un type de données de sorte que seules les classes d'entités surfaciques commençant par la lettre G figurent dans la liste de résultats :

# Set the workspace. List all of the polygon feature classes that 
#   start with 'G'
#
env.workspace = "D:/St_Johns/data.gdb"
fcs = arcpy.ListFeatureClasses("G*", "polygon")

Utilisation de votre liste

ArcPy utilise un type de liste Python comme type en retour pour tous les résultats des fonctions de liste, car les listes offrent la flexibilité nécessaire à un accès aux données simples et à plusieurs types de données. Une boucle For s'avère idéale si vous utilisez une liste Python car elle peut être utilisée pour parcourir un à un les éléments de la liste. Une boucle For parcourt chaque élément de la liste. Voici un exemple de boucle For utilisée pour explorer la liste créée dans l'exemple précédent :

# For each feature class in the list of feature classes
#
for fc in fcs: 
    # Copy the features from the workspace to a folder
    #
    arcpy.CopyFeatures_management(fc, "D:/St_Johns/Shapefiles/” + fc)

Voici un autre exemple d'utilisation d'une fonction de liste. Ce script sert à créer des pyramides de rasters pour tous les rasters représentant des images TIFF (Tagged Image File Format) dans un dossier.

# Set the workspace. List all of the TIFF files
#
env.workspace= "D:/St_Johns/images"

# For each raster in the list of rasters
#
for tiff in arcpy.ListRasters("*", "TIF"): 
    # Create pyramids
    #
    arcpy.BuildPyramids_management(tiff)

Une liste Python permet d'utiliser et de gérer les résultats d'une fonction de liste de plusieurs manières. Les listes constituent un type Python polyvalent et fournissent plusieurs méthodes (append, count, extend, index, insert, pop, remove, reverse et sort) pouvant être utilisées pour manipuler et extraire les informations.

Par exemple, si vous voulez savoir combien vous avez de classes d'entités dans un espace de travail, vous pouvez utiliser la fonction len intégrée de Python pour connaître ce nombre.

import arcpy
from arcpy import env

env.workspace = "c:/St_Johns/Shapefiles"

fcs = arcpy.ListFeatureClasses()

# Use Python's built-in function len to reveal the number of feature classes
#   in the workspace
#
fcCount = len(fcs)
print fcCount
AstuceAstuce :

Le contenu des listes Python peut être affiché facilement. Les listes Python peuvent être manipulées avec plusieurs méthodes, y compris sort, append et reverse.

>>> import arcpy
>>> from arcpy import env
>>> env.workspace  = "c:/data/water.gdb"
>>> fcs = arcpy.ListFeatureClasses()
>>> print fcs
[u'water_pipes', u'water_services', u'water_stations']

>>> fcs.sort(reverse=True)
>>> print fcs
[u'water_stations', u'water_services', u'water_pipes']

Puisque les listes correspondent à une collection ordonnée, elles permettent également l'indexation et le découpage.

>>> print fcs[0]
water_stations

>>> print fcs[1:]
[u'water_services', u'water_pipes']

Mots-clés de type des fonctions de liste

Par défaut, toutes les fonctions de liste répertorient l'ensemble des types pris en charge. Un mot-clé sert à limiter la liste renvoyée selon un type spécifique. Pour chaque fonction, les mots-clés définissant le type sont répertoriés dans la table ci-dessous.

Fonction

Mots-clés de type

ListDatasets

All, Feature, Coverage, RasterCatalog, CAD, VPF, TIN, Topology

ListFeatureClasses

All, Point, Label, Node, Line, Arc, Route, Polygon, Region

ListFields

All, SmallInteger, Integer, Single, Double, String, Date, OID, Geometry, BLOB

ListTables

All, dBASE, INFO

ListRasters

All, ADRG, BIL, BIP, BSQ, BMP, CADRG, CIB, ERS, GIF, GIS, GRID, STACK, IMG, JPEG, LAN, SID, SDE, TIFF, RAW, PNG, NITF

ListWorkspaces

All, Coverage, Access, SDE, Folder

Mots-clés de type pour les fonctions de liste

Exemple : utilisation de fonctions de liste pour migrer d'une géodatabase personnelle vers une géodatabase fichier

Une tâche de conversion courante consiste à transférer à grande échelle des données d'un format à un autre. Le script suivant tire profit des méthodes ListWorkspaces, ListFeatureClasses, ListTables et ListDatasets pour identifier toutes les géodatabases personnelles dans un dossier et convertit les jeux de données d'entité, les classes d'entités et les tables de chacune d'elles en géodatabases fichier.

import arcpy
from arcpy import env
import os

# Allow for the overwriting of file geodatabases, if they already exist
#
env.overwriteOutput = True

# Set workspace to folder containing personal geodatabases
#
env.workspace = arcpy.GetParameterAsText(0)

# Identify personal geodatabases
#
for pgdb in arcpy.ListWorkspaces("", "Access"):
    # Set workspace to current personal geodatabase
    #
    env.workspace = pgdb

    # Create file geodatabase based on personal geodatabase
    #
    fgdb = pgdb[:-4] + ".gdb"
    arcpy.CreateFileGDB_management(os.path.dirname(fgdb), os.path.basename(fgdb))

    # Identify feature classes and copy to file gdb
    #
    for fc in arcpy.ListFeatureClasses():
        print "Copying feature class " + fc + " to " + fgdb
        arcpy.Copy_management(fc, fgdb + os.sep + fc)

    # Identify tables and copy to file gdb
    #
    for table in arcpy.ListTables():
        print "Copying table " + table + " to " + fgdb
        arcpy.Copy_management(table, fgdb + os.sep + table)

    # Identify datasets and copy to file gdb
    #   Copy will include contents of datasets
    #
    for dataset in arcpy.ListDatasets():
        print "Copying dataset " + dataset + " to " + fgdb
        arcpy.Copy_management(dataset, fgdb + os.sep + dataset)

Rubriques connexes


7/10/2012