Enumerar datos

Una de las tareas principales en una secuencia de comandos de procesamiento por lotes es catalogar los datos disponibles de modo que se pueda recorrer en iteración los datos durante el procesamiento. ArcPy tiene varias funciones diseñadas específicamente para la creación de estas listas.

ListFields(dataset, wild_card, field_type)

Devuelve una lista de los campos que se encuentran en el valor de entrada

ListIndexes(dataset, wild_card)

Devuelve una lista de los índices de atributos que se encuentran en el valor de entrada

ListDatasets(wild_card, feature_type)

Devuelve los datasets en el espacio de trabajo actual

ListFeatureClasses(wild_card, feature_type)

Devuelve las clases de entidades en el espacio de trabajo actual

ListFiles(wild_card)

Devuelve los archivos en el espacio de trabajo actual

ListRasters(wild_card, raster_type)

Devuelve una lista de los rásteres que se encuentran en el espacio de trabajo actual

ListTables(wild_card, table_type)

Devuelve una lista de las tablas que se encuentran en el espacio de trabajo actual

ListWorkspaces(wild_card, workspace_type)

Devuelve una lista de los espacios de trabajo que se encuentran en el espacio de trabajo actual

ListVersions(sde_workspace)

Devuelve una lista de las versiones que el usuario que está conectado tiene permiso de utilizar

Funciones de Lista

El resultado de cada una de estas funciones es una lista de Python, que es una lista de los valores. Una lista en la secuencia de comandos puede contener cualquier tipo de datos, tales como una cadena de caracteres, que puede ser, por ejemplo, una ruta hacia un dataset, un campo o una fila de una tabla. Una vez que se creó la lista con los valores que desea, puede incluirla en un bucle en la secuencia de comandos para trabajar con cada valor individual.

Más información sobre cómo enumerar las herramientas, las cajas de herramientas y la configuración del entorno

Parámetros de funciones de lista

Los parámetros de estas funciones son similares. Algunos, tales como ListFields, requieren un valor de dataset de entrada, ya que los elementos que las funciones enumeran residen dentro de un determinado objeto o dataset. Otras funciones no requieren un dataset de entrada, ya que enumeran tipos de datos en el espacio de trabajo actual que están definidos en la configuración del entorno. Todas las funciones tienen un parámetro comodín, que se utiliza para restringir los objetos o datasets que se enumeran por nombre. Un comodín define un filtro de nombre y todo el contenido en la lista que se creó recientemente debe pasar por ese filtro. Por ejemplo, es posible que desee enumerar todas las clases de entidades en un espacio de trabajo que comiencen con la letra G. El siguiente ejemplo muestra cómo realizar esta tarea:

 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 lista también se puede restringir para que coincida con ciertas propiedades de datos, tales como solamente clases de entidades poligonales, campos enteros o datasets de cobertura. Para esto se utiliza el parámetro Tipo en todas las funciones. En el siguiente ejemplo, las clases de entidades en un espacio de trabajo se filtran con un comodín y un tipo de datos, de modo que solamente las clases de entidades poligonales que comienzan con la letra G se incluyen en la lista resultante:

# 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")

Utilizar su lista

ArcPy utiliza un tipo de lista de Python como el tipo que se devolvió para todos los resultados de las funciones de lista, ya que las listas admiten la flexibilidad que se requiere para el acceso de datos simples y varios tipos de datos. Un bucle For es ideal para trabajar con una lista de Python ya que se puede utilizar para recorrer la lista de un elemento por vez. Un bucle For recorre en iteración todos los elementos de la lista. A continuación hay un ejemplo de un bucle For utilizado para recorrer en iteración la lista que se generó en el ejemplo anterior:

 # 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) 

A continuación hay otro ejemplo de cómo utilizar una función de Lista. La secuencia de comandos se utiliza para crear pirámides de ráster para todos los rásteres que son imágenes de Formato de archivo de imagen etiquetado (TIFF) dentro de una carpeta.

# 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)  

Una lista de Python ofrece la oportunidad de utilizar y administrar los resultados de una función de lista en una variedad de formas. Las listas son un tipo de Python versátil y proporcionan varios métodos (adjuntar, contar, extender, indexar, insertar, emerger, quitar, invertir, ordenar) que se pueden utilizar para manipular y extraer información.

Por ejemplo, si desea saber cuántas clases de entidades tiene en un espacio de trabajo, puede utilizar una función len integrada de Python para proporcionar esa cantidad.

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 
SugerenciaSugerencia:

Una lista de Python puede mostrar su contenido fácilmente. Las listas de Python se pueden manipular con varios métodos, incluidos ordenar, adjuntar e invertir.

>>> 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']  

Debido a que las listas son un conjunto ordenado, también permiten indexar y segmentar.

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

Palabras clave de tipo de función de lista

El comportamiento predeterminado para todas las funciones de lista es enumerar todos los tipos compatibles. Una palabra clave se utiliza para restringir la lista que se devolvió a un tipo específico. Las palabras clave de tipo para cada función se enumeran en la siguiente tabla.

Función

Palabras clave de tipo

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

Palabras clave de tipo para las funciones de Lista

Ejemplo: Utilizar las funciones de lista para migrar de las geodatabases personales a las geodatabases de archivos

Una tarea de conversión común es la transferencia a gran escala de los datos de un formato a otro. La siguiente secuencia de comandos aprovecha ListWorkspaces, ListFeatureClasses, ListTables y ListDatasets para identificar todas las geodatabases personales en una carpeta y convierte los datasets de entidades, las clases de entidades y las tablas de cada una en geodatabases de archivos.

 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) 

Temas relacionados


7/11/2012