Abrir un proyecto y revisar datasets

Antes de empezar a utilizar Python para enumerar y describir datasets, descargará y extraerá un archivo .zip de los datos de proyecto y revisará los datasets en ArcGIS Pro.

  1. Descargue los datos de este tutorial y extraiga el contenido en una ubicación en su ordenador.

    El archivo .zip contiene una carpeta denominada PythonDesc.

    En este tutorial, los datos se muestran en C:\Lessons\PythonDesc\. Puede utilizar una carpeta diferente, pero asegúrese de ajustar las rutas en las instrucciones y el código siguientes.

  2. Inicie ArcGIS Pro.
  3. En ArcGIS Pro, en Nuevo proyecto, haga clic en Comenzar sin ninguna plantilla.

    Comenzar sin ninguna plantilla.

    Se abre un nuevo proyecto llamado Sin título. Solo utilizará ArcGIS Pro para revisar los datos, por lo que no es necesario cambiar el nombre del proyecto y guardar el trabajo.

  4. Si el panel Catálogo no está visible, en la pestaña Vista, haga clic en Panel Catálogo.
  5. En el panel Catálogo, haga clic con el botón derecho en Carpetas y haga clic en Agregar conexión a carpetas.

    Agregar conexión a carpetas.

  6. En la ventana Agregar conexión a carpetas, vaya a la ubicación en la que extrajo el archivo PythonDesc.zip (C:\Lessons) y haga clic en la carpeta PythonDesc seguido de Aceptar.
  7. En el panel Catálogo, expanda Carpetas y PythonDesc.

    Contenido de la carpeta PythonDesc

    La carpeta contiene dos shapefiles (bike_routes.shp y watersheds.shp), así como un archivo de texto (bike_racks.csv) y una tabla de base de datos (gardens.dbf). También contiene una geodatabase denominada DC.gdb.

  8. Expanda DC.gdb.

    expandido.

    La geodatabase contiene tres clases de entidad (límite,vecindarios y public_schools), una tabla (car_share_locations) y un dataset de entidades (Transporte).

  9. Expanda Transporte.

    Dataset de transporte expandido.

    El dataset de entidades contiene cuatro clases de entidad (carreteras,street_lights,traffic_analysis_zones y traffic_junctions) y un dataset de red (tráfico).

    Los datasets son típicos de proyectos de SIG: clases de entidad y datos tabulares en diferentes formatos, así como otros elementos para organizar estos datos. Utilizará el código Python para identificar estos datasets en función de su tipo y otras propiedades. Observe que estos grupos significan que los datos del proyecto tienen una estructura anidada de varios niveles.

    Antes de trabajar con el código Python, también explorará estos datasets examinando los archivos reales en su equipo.

  10. Abra el Microsoft File Explorer y vaya a la carpeta C:\Lessons\PythonDesc\ o a otra ubicación donde tenga la carpeta PythonDesc.

    Contenido de la carpeta en el Explorador de archivos de Windows

    El File Explorer muestra los archivos. Las dos tablas independientes, bike_racks.csv y gardens.dbf, son archivos únicos. Los shapefiles bike_routes y watersheds están compuestos por varios archivos con el mismo nombre y distintas extensiones de archivo. La geodatabase DC es una carpeta con una extensión de archivo .gdb.

  11. En el File Explorer, expanda la carpeta DC.gdb.

    Contenido de la geodatabase

    Hay docenas de archivos dentro de esta carpeta. No hay ningún vínculo reconocible entre estos archivos y los elementos de datos que están visibles al visualizar la geodatabase en el panel Catálogo en ArcGIS Pro. Por ejemplo, no puede identificar uno o más archivos que constituyen una clase de entidad específica. Esto es importante cuando se utilizan datasets SIG en código Python, ya que afecta a la forma de acceder y trabajar con datasets en diferentes formatos.

  12. Ha examinado la organización de los datos en ArcGIS Pro y en el Explorador de archivos de Windows. A continuación, abrirá un archivo Python y empezará a utilizar Python para enumerar y describir estos datos.

Abrir un archivo de script de Python

En este tutorial, escribirá el código Python con IDLE. IDLE es un editor básico Python que se incluye con ArcGIS Pro.

Para garantizar que se utilice la versión correcta de Python instalada con ArcGIS Pro para ejecutar el código, usará un acceso directo para iniciar IDLE.

Si también tiene instalado ArcGIS Desktop (ArcMap), el menú contextual también incluirá el acceso directo Editar con IDLE. No use este acceso directo de teclado; abrirá una versión anterior de Python.

  1. En el File Explorer, retroceda un nivel hasta la carpeta C:\Lessons\PythonDesc\.
  2. Haga clic con el botón derecho en describe_data.py y haga clic en Editar con IDLE (ArcGIS Pro).

    Editar con IDLE (ArcGIS Pro)

    Al abrir IDLE de esta forma, se abre el script utilizando el entorno Python activo de ArcGIS Pro. Esto garantiza que se utilice la versión correcta de Python. Aunque en este tutorial se utiliza IDLE como editor de código, el código también funciona en otros editores de Python, por ejemplo, PyCharm o Spyder, además de en la ventana Python o notebooks dentro de ArcGIS Pro.

    Nota:
    Si Editar con IDLE (ArcGIS Pro) no está visible en el menú contextual, haga clic en Inicio, expanda ArcGIS y haga clic en la ventana de comandos de Python. En la ventana de comandos de Python, escriba inactivo y pulse Intro. Aparece IDLE (Python 3.7 Shell). Haga clic en Archivo seguido de Abrir. Busque y abra el archivo describe_data.py.

    Se abre el script.

    Script abierto en IDLE.

    El script incluye tres líneas de código para empezar. La primera línea es import arcpy, que importa el paquete ArcPy. Esto garantiza que la funcionalidad de ArcPy, incluidas las funciones que utilizará para enumerar y describir datasets SIG, esté disponible en el script.

    La segunda línea especifica la ruta donde residen los datos. Este valor se asigna a una variable denominada mypath.

    Se utiliza una sola barra diagonal (/) en la ruta en lugar de una sola barra invertida (\). En Python se usa una sola barra invertida como carácter de escape y el empleo en rutas puede tener consecuencias no deseadas. Cuando le siguen determinados caracteres, codifican un comportamiento especial. Por ejemplo, \t significa una pestaña, y una ruta como C:\Lessons\toronto.gdb provocaría que se agregue una pestaña en la ruta, lo que provocaría un error.

    En lugar de una barra diagonal, también puede agregar la letra r (para sin procesar) antes de la cadena de caracteres (r"C:\Lessons\PythonDesc") o puede usar dos barras invertidas ("C:\\Lessons\\PythonDesc"). Las tres notaciones funcionan.

    La tercera línea establece el espacio de trabajo. Un espacio de trabajo es la ubicación predeterminada para los archivos con los que trabajará, como datasets de entrada y de salida. El espacio de trabajo se establece en la variable mypath. Aunque es posible establecer el espacio de trabajo directamente sin utilizar la variable mypath, hay beneficios de utilizar una variable independiente para la ruta donde residen los datos.

  3. Si guardó la carpeta PythonDesc en una ubicación distinta de C:\Lessons\PythonDesc\, edite la ruta del script para que señale la ubicación donde guardó la carpeta.

    Por ejemplo, si extrajo los datos de este tutorial en la carpeta C:\EsriLessons, debe editar la segunda línea para que sea como sigue:

    mypath = "C:/EsriLessons/PythonDesc"

    Si su ruta es relativamente larga, puede copiar la ruta desde el Explorador de archivos y pegarla en el script. Para ello, haga clic con el botón derecho en la carpeta (Windows 11) o mantenga pulsada la tecla Mayús, haga clic con el botón derecho en la carpeta (Windows 10) y haga clic en Copiar como ruta. A continuación, puede seleccionar y eliminar la ruta anterior del script y pulsar Ctrl+V para pegar la nueva ruta.

    Para usar una ruta como espacio de trabajo válido, debe ser una cadena de caracteres Python, lo que significa que debe haber comillas alrededor de la ruta. También deberá utilizar uno de los tres estilos correctos para las rutas de acceso mencionadas anteriormente. Si copia una ruta de Windows, contendrá barras invertidas. Puede reemplazar cada barra invertida por dos barras invertidas o una sola barra diagonal. Para las rutas largas, la solución más sencilla es agregar una r delante de la cadena de caracteres para convertirla en una cadena de caracteres sin procesar. Con ello se garantiza que las barras invertidas no se lean como caracteres de escape.

    Ahora probará el código.

  4. Haga clic en Archivo y en Guardar.
  5. Haga clic en Ejecutar y, a continuación, en Ejecutar módulo.

    Aparece la ventana del shell de IDLE, que muestra un mensaje que indica que el shell se ha reiniciado para su script. Se muestran la ruta del script y el nombre del archivo. Hay una pausa de varios segundos y después vuelve a aparecer el símbolo del shell de IDLE >>>.

    El shell

    Puede parecer que no ocurrió nada, porque el script no tiene ninguna instrucción que imprima datos en el shell. Más adelante, agregará declaraciones de impresión al código para devolver la información al shell.

    El shell de IDLE también es un lugar donde se pueden escribir líneas de código y hacer que se ejecuten inmediatamente.

  6. En el shell de IDLE, tras la indicación >>>, escriba print(arcpy.env.workspace) y pulse Intro.

    Imprima el espacio de trabajo.

    La ruta al espacio de trabajo que se configura en el script se imprime en el shell de IDLE. El script importó el módulo arcpy; establezca la variable mypath igual que una cadena de caracteres que contenía la ruta de acceso a los datos del tutorial y defina el espacio de trabajo de arcpy en esa ruta. Al imprimir el valor de arcpy.env.workspace en el shell, ha mostrado que el script funcionaba.

  7. Cierre la ventana del shell de IDLE.

Con el espacio de trabajo definido, puede hacer referencia a un dataset utilizando su nombre de archivo sin la ruta completa.

Describir un dataset mediante Python

Ahora que el script establece el espacio de trabajo, puede utilizar Python para describir las propiedades de un dataset en ese espacio de trabajo.

Utilizará la función da.Describe() para hacer esto.

  1. En la ventana del editor de IDLE, haga clic después de la línea arcpy.env.workspace = mypath y pulse Intro para agregar una nueva línea.
  2. Escriba el siguiente código y pulse Intro.

    desc = arcpy.da.Describe("bike_routes.shp")

    Describa rutas para bicicletas.

    La función da.Describe() es una función del módulo arcpy.da, que se utiliza para los flujos de trabajo de acceso a datos. La función devuelve un diccionario Python. Un diccionario Python está formado por pares de claves y sus valores correspondientes. Las claves del diccionario devuelto por da.Describe() son las propiedades del dataset.

  3. Agregue una nueva línea después de la línea desc = arcpy.da, agregue el siguiente código y pulse Intro:

    print(f'baseName: {desc["baseName"]}')

    Cuando se ejecuta el script, se imprime el valor de la propiedad baseName. En la línea de código anterior, desc es el diccionario de propiedades y baseName es la clave, como cadena de caracteres. La expresión desc["baseName"] devuelve el valor asociado a esta clave en el diccionario.

    El estilo del formato de impresión utilizado aquí se conoce como una cadena de caracteres f. Las cadenas de caracteres f también se denominan literales de cadena de caracteres con formato . Son cadenas de caracteres a las que se antepone la letra f y contienen variables entre llaves. Estas variables se sustituyen por su valor en tiempo de ejecución. En el código de ejemplo anterior, se usan comillas dobles alrededor del valor baseName para convertirlo en una cadena de caracteres. Dado que las comillas también se utilizan para las cadenas de caracteres f, se necesitan comillas simples para distinguirlas de las comillas dobles. Estos diferentes tipos de comillas se pueden usar indistintamente en Python, siempre que se utilicen de manera coherente.

    Lo siguiente es igual de correcto:

    print(f"baseName: {desc['baseName']}")

    Hasta el momento, el código completo es el siguiente:

    import arcpy
    mypath = "C:/Lessons/PythonDesc"
    arcpy.env.workspace = mypath
    desc = arcpy.da.Describe("bike_routes.shp")
    print(f'baseName: {desc["baseName"]}')

    Si ha almacenado los datos en otra ubicación, su línea mypath será diferente.

  4. Haga clic en Archivo y, a continuación, en Guardar para guardar el script.

    También puede usar el acceso directo del teclado Ctrl+S.

  5. Haga clic en Ejecutar y, a continuación, en Ejecutar módulo.

    Genere un informe con el nombre base bike_routes.

    Aparece la ventana del shell IDLE con el resultado:

    baseName: bike_routes

    El nombre base de los datos es el nombre de archivo sin la extensión de archivo.

    Al aprender a codificar, es habitual obtener errores. En el siguiente paso se ilustra un error típico que puede encontrarse al ejecutar este script.

  6. Modifique la línea desc = arcpy.da.Describe("bike_routes.shp") eliminando el guión bajo de bike_routes.

    desc = arcpy.da.Describe("bikeroutes.shp")

  7. Guarde y ejecute el script.

    El shell de IDLE muestra un mensaje de error:

    ValueError: Object: Error in accessing describe

    Mensaje de error de valor

    El error sugiere que existe un problema con la función da.Describe(). Este error se debe a que el nombre de la clase de entidad no está escrito correctamente, de modo que no se puede localizar. Si encuentra este error, compruebe que el nombre sea correcto. Otro posible error es que el espacio de trabajo no se haya establecido correctamente, por lo que debe asegurarse de comprobar también la ruta utilizada para su espacio de trabajo.

    Nota:
    Además de da.Describe(), también puede utilizar la función normal de ArcPy Describe() para examinar las propiedades de los datasets SIG. La sintaxis es ligeramente diferente de da.Describe(). La función Describe() devuelve un objeto Describe, y puede utilizar este objeto para comprobar sus propiedades.

  8. En la ventana del editor de IDLE, cambie la línea para corregir el nombre de la clase de entidad.

    desc = arcpy.da.Describe("bike_routes.shp")

  9. Después de la línea print(f'baseName:, elimine las siguientes líneas:

    print(f'extension: {desc["extension"]}')
    print(f'dataType: {desc["dataType"]}')
    print(f'shapeType: {desc["shapeType"]}')

  10. Guarde y ejecute el script.

    Resultados con propiedades adicionales impresas

    Se imprimen el nombre base, la extensión de archivo, el tipo de datos y el tipo de geometría del dataset de entrada. Es fácil ver en el panel Catálogo que bike_routes.shp es un shapefile de polilínea, pero ahora puede acceder a esas propiedades en un script de Python.

    Hay muchas más propiedades, pero esto proporciona un buen punto de partida para entender cada dataset. Puede encontrar una lista completa de las propiedades en la sección de documentación de ArcPy de las páginas de ayuda de ArcGIS Pro.

    Hay muchas propiedades diferentes y en las páginas de ayuda se organizan en grupos de propiedades. El grupo de propiedades Describe del vínculo anterior incluye algunas propiedades generales para todos los datasets, incluidos baseName, extension y datatype. Después hay grupos de propiedades para tipos específicos de datasets. Por ejemplo, el grupo de propiedades FeatureClass incluye la propiedad shapeType que se utiliza en el ejemplo de código anterior. No todos los datasets tendrán esta propiedad, ya que es posible que no contengan ninguna geometría. Algunas propiedades pueden ser un poco difíciles de localizar cuando se navega por las páginas de ayuda. Por ejemplo, la propiedad "extent" se encuentra en el grupo de propiedades Dataset. Los grupos de propiedades solo pertenecen a la organización de las páginas de ayuda y no afectan al código.

A continuación, reemplazará la referencia al dataset para usar el script para explorar otros datasets.

Describir otros datasets

Ahora que tiene el script que describe el dataset bike_routes.shp, lo modificará para describir otros datos.

  1. Modifique la línea desc = arcpy.da.Describe("bike_routes.shp") para reemplazar bike_routes.shp por watersheds.shp.

    desc = arcpy.da.Describe("watersheds.shp")

  2. Guarde y ejecute el script.

    Resultados del shapefile de cuenca hidrográfica

  3. Modifique la línea desc = arcpy.da.Describe("bike_routes.shp") para reemplazar watersheds.shp por bike_racks.csv.

    desc = arcpy.da.Describe("bike_racks.csv")

  4. Guarde y ejecute el script.

    Error de clave en el archivo CSV

    El shell de IDLE muestra un mensaje de error.

    KeyError: 'shapeType'

    Esto significa que se ha producido un error al utilizar el diccionario porque la clave de diccionario shapeType no existe. Al considerar lo que significa shapeType, esto tiene sentido. Un archivo de texto no tiene geometría, por lo que no se puede categorizar como Punto, Polilínea o Polígono. Falta la propiedad en el diccionario porque no es significativa para los archivos CSV.

    El diccionario devuelto por da.Describe() solo incluye las claves y los valores que son significativos para un determinado tipo de datos.

    Puede evitar que ocurra el error realizando una comprobación.

  5. Haga clic en el script después de la línea print(f'dataType: {desc["dataType"]}') y pulse Intro para agregar una nueva línea.

    Agregue una línea nueva.

  6. Después de la línea print(f'dataType:, elimine la línea siguiente:

    if "shapeType" in desc:

    La línea contiene una declaración if. Las líneas de declaración If incluyen una prueba, en este caso, que determina si la cadena de caracteres "shapeType" está en el diccionario desc. Después de la prueba, las declaraciones if van seguidas de dos puntos. La siguiente línea es la primera línea de un bloque de código que se ejecuta condicionalmente, si esa prueba se evalúa como verdadera. A las líneas del bloque de código debe aplicarse sangría para indicar a Python que son inseparables y solo deberían ejecutarse si la prueba es verdadera.

  7. Haga clic al principio de la última línea y agregue cuatro espacios para aplicar sangría a la línea.

    Aplique sangría a la última línea.

    Las dos últimas líneas de código son las siguientes:

    if "shapeType" in desc:
        print(f'shapeType: {desc["shapeType"]}')

  8. Guarde y ejecute el script.

    Resultados del archivo CSV

    Los resultados del archivo CSV se imprimen sin errores. Se imprimen las primeras tres propiedades; a continuación, la declaración if comprueba si el diccionario contiene "shapeType", y como no, la última línea no se ejecuta.

    ¿Cómo puede ver qué propiedades están disponibles para un dataset determinado?

    Puede ver las propiedades imprimiendo el diccionario completo.

    A continuación, verá cómo imprimir las propiedades.

Imprimir todas las propiedades de un dataset

Ha visto cómo imprimir claves y valores específicos de un diccionario y cómo probar si una clave concreta se encuentra en el diccionario. Ahora verá cómo imprimir todo el diccionario.

  1. Seleccione las cinco últimas líneas del script.

    Esto incluye las líneas que imprimen las primeras tres propiedades, además de la declaración if y la línea de impresión final.

  2. Con las líneas de código seleccionadas, haga clic en Formato y, a continuación, en Región marcada con comentarios.

    Región marcada con comentarios

    Las líneas seleccionadas ahora tienen signos de libra esterlina doble antes de ellas. Una # inicial convierte una línea en un comentario para Python, de modo que estas líneas no se ejecutarán cuando se ejecute el código.

    También puede hacerlo escribiendo un signo de libra esterlina al inicio de cada línea, pero la opción de menú en IDLE permite hacer esto con varias líneas en un solo paso.

    Para invertirlo, seleccione las líneas y, en el menú Formato, seleccione Eliminar Quitar marca de comentario de región.

  3. Agregue una nueva línea de código en la parte inferior del script y elimine cualquier sangría.
  4. Agregue las siguientes líneas:

    for k, v in desc.items():
        print(f"{k}: {v}")

    Bucle para imprimir todas las propiedades.

    La primera de las dos líneas nuevas inicia un bucle for. Los bucles For toman un conjunto de entradas y un bloque de código con sangría que se ejecuta en cada una de las entradas. En este caso, el bucle for itera en los pares de clave y valor devueltos por la llamada al método items del diccionario desc. Consulte la documentación de Python para obtener más información sobre losbucles en diccionarios.

    La segunda de las dos líneas aparece con sangría. Esta línea es la única línea del bloque de código del bucle for. Cada vez que se ejecuta el bucle, esta línea imprime una cadena de caracteres con formato que contiene los valores de las variables k y v (la clave y el valor), separadas por dos puntos.

  5. Guarde y ejecute el script.

    Resultado de ejecutar el bucle de valores de clave de lista en el archivo CSV

    El código establece una iteración en todos los elementos del diccionario e imprime las claves y los valores.

    Imprimir el diccionario permite ver las propiedades de un tipo de datos determinado.

    A continuación, examinará algunos de los elementos contenidos en la geodatabase.

Describir clases de entidad de geodatabase

Ahora que ha visto cómo examinar las propiedades de shapefiles basados en archivos y tablas CSV, utilizará Python para examinar las propiedades de los elementos de una geodatabase. Utilizará el conjunto de declaraciones de impresión que utilizó anteriormente, en lugar de enumerar todas las propiedades.

  1. Seleccione las cinco líneas de código que se han marcado con comentarios anteriormente, haga clic en Formato y, a continuación, en Quitar marca de comentario de región.
  2. Marque con comentarios las dos líneas de código finales que se utilizaron para iterar en el diccionario.
  3. Modifique la línea mypath = "C:/Lessons/PythonDesc" para agregar /DC.gdb.

    mypath = "C:/Lessons/PythonDesc/DC.gdb"

  4. Modifique la línea desc = arcpy.da.Describe("bike_racks.csv") para describir la clase de entidad boundary.

    desc = arcpy.da.Describe("boundary")

    Los elementos contenidos en una geodatabase no tienen una extensión de archivo, por lo que solo se distinguen en función de su tipo de datos.

    Describa la clase de entidad de límite.

  5. Guarde y ejecute el script.

    Describa el resultado del script de límite.

    La segunda propiedad es la extensión de archivo. Aunque esta propiedad es una clave válida en el diccionario, el valor está vacío. Dado que las extensiones de archivo vacías son comunes a los elementos de la geodatabase, puede agregar otra declaración if para imprimir solo la línea correspondiente a la extensión, si hay una presente.

  6. Reemplace la línea print(f'extension: {desc["extension"]}') por las dos líneas siguientes:

    if desc["extension"] != "":
        print(f'extension: {desc["extension"]}')

    Líneas de visualización de extensión condicional

    El operador de comparación != significa "no igual que". Los operadores de comparación válidos en Python son == (igual que), != (no igual que), < (menor que), <= (menor o igual que), > (mayor que) y >= (mayor o igual que). Tenga en cuenta que =! y <> parece que también deberían funcionar, pero no son operadores de comparación válidos y generarán un error de sintaxis.

    La primera de estas dos líneas verifica si el valor asociado con la clave "extensión" no es igual que una cadena de caracteres vacía (dos comillas sin nada entre ellas). Si esto se evalúa como verdadero, se ejecuta la línea para imprimir la cadena de caracteres con formato con el nombre de la clave de extensión y el valor asociado para esa clave.

  7. Guarde y ejecute el script.

    Resultados del código de extensión condicional

    El código se ejecuta y comprueba si la clave de extensión no tiene un valor vacío. Dado que tiene un valor vacío, la prueba se evalúa como falsa, de modo que la línea de bloque de código con sangría no se ejecuta y el código no imprime esa línea. El código continúa a la siguiente línea fuera del bloque de código, continúa e imprime dataType y shapeType.

    Puede explorar el resto de elementos dentro de la geodatabase de forma similar cambiando el nombre del elemento en la función da.Describe().

  8. Modifique la línea desc = arcpy.da.Describe("boundary") para reemplazar boundary por car_share_locations.

    desc = arcpy.da.Describe("car_share_locations")

  9. Guarde y ejecute el script.

    Tabla Describir ubicaciones de uso compartido de coches

    El elemento car_share_locations es una tabla de geodatabase. No tiene extensión ni entrada para shapeType, por lo que no se imprimen esas líneas.

  10. Modifique la línea desc = arcpy.da.Describe("car_share_locations") para describir el elemento Transporte.

    desc = arcpy.da.Describe("Transportation")

  11. Guarde y ejecute el script.

    Resultado de descripción del transporte

    Transporte es un dataset de entidades dentro de la geodatabase. Un dataset de entidades contiene elementos de datos que comparten un sistema de coordenadas común. Un dataset de entidades se puede utilizar como un espacio de trabajo.

  12. Modifique la línea mypath = "C:/Lessons/PythonDesc/DC.gdb" para agregar /Transportation.

    mypath = "C:/Lessons/PythonDesc/DC.gdb/Transportation"

    Ahora puede describir las clases de entidad y otros elementos que residen dentro del dataset de entidades.

  13. Modifique la línea desc = arcpy.da.Describe("Transportation") para describir el elemento Tráfico.

    desc = arcpy.da.Describe("Traffic")

    Código para describir la red de

  14. Guarde y ejecute el script.

    Descripción de la red de tráfico

    Tráfico es un dataset de red. Los datasets de red se utilizan para modelar redes de transporte. Se crean a partir de entidades de origen, que pueden incluir entidades simples (líneas y puntos) y giros, y almacenan la conectividad de las entidades de origen. Cuando se realiza un análisis de red, siempre se hace en un dataset de red.

    Existen otros tipos de datos que se pueden utilizar en da.Describe(), pero los elementos que ha descrito cubren algunos de los tipos más típicos de datasets SIG. No obstante, describir cada dataset de uno en uno puede resultar engorroso. Es útil poder crear una lista de los distintos datasets disponibles en un espacio de trabajo sin tener que escribir sus nombres individuales.

Enumerar archivos en un espacio de trabajo

Una tarea común en el script de Python es trabajar con varios datasets. Escribir el nombre de cada dataset individual es engorroso y lleva tiempo. ArcPy incluye varias funciones para crear un inventario de datasets. Estas funciones suelen devolver los datasets como una lista de Python que se puede utilizar para seguir procesando.

  1. Empezará con un nuevo script.
  2. En la ventana del editor de IDLE, haga clic en Archivo seguido de Guardar como.

    El nombre de archivo de script actual es describe_data.py. Utilizará Guardar como para crear un nuevo script para continuar con su trabajo y conservar el trabajo que ha hecho hasta ahora en el archivo describe_data.py de manera que lo tenga para referencias futuras.

  3. En el cuadro de diálogo Guardar como, escriba list_data.py y haga clic en Guardar.
  4. En la ventana del script describe_data, seleccione todas las líneas excepto las tres primeras y pulse la tecla Suprimir.

    Elimine todas las líneas menos las tres primeras.

  5. Edite la línea mypath = para eliminar /DC.gdb/Transportation de la ruta.

    mypath = "C:/Lessons/PythonDesc"

    Esto dejará la ruta a la carpeta base para los datos del tutorial.

  6. Después de la línea arcpy.env.workspace, agregue las dos líneas siguientes:

    files = arcpy.ListFiles()
    print(files)

    La primera de estas líneas crea una nueva variable llamada files y la establece como resultado de la llamada a la función ListFiles. Las funciones van seguidas de una lista de parámetros, encerradas entre paréntesis. En este caso, la función ListFiles() no requiere ningún parámetro de entrada, por lo que los paréntesis están vacíos.

    La segunda línea imprime la lista.

    Enumere e imprima archivos.

    El código debería tener este aspecto:

    import arcpy
    mypath = "C:/Lessons/PythonDesc"
    arcpy.env.workspace = mypath
    files = arcpy.ListFiles()
    print(files)

  7. Guarde y ejecute el script.

    Enumerar datos de resultados de ListFiles primero

    Esta es una lista de los archivos de la carpeta PythonDesc. Las listas de Python se encierran entre corchetes.

    La función ListFiles devuelve los archivos en el espacio de trabajo actual. Eso significa que si el espacio de trabajo no se ha establecido con arcpy.env.workspace, el resultado es una lista vacía y el script imprime None.

    La función no tiene parámetros obligatorios y utiliza automáticamente el espacio de trabajo actual. Los archivos que se enumeran son muy similares a los visibles en el Explorador de archivos. Hay una excepción. Una geodatabase es una carpeta del Explorador de archivos, pero se incluye en el resultado de ListFiles(). Como resultado, DC.gdb se muestra aquí como un archivo, aunque es técnicamente una carpeta que contiene archivos.

    La búsqueda se limita para devolver solo tipos de archivos específicos.

  8. Edite la línea files = arcpy.ListFiles() para agregar "*.csv" entre paréntesis.

    files = arcpy.ListFiles("*.csv")

    La función ListFiles puede tomar un parámetro opcional, denominado wildcard, que permite especificar una cadena de caracteres que los resultados de la búsqueda deben contener. El asterisco representa un cero o más caracteres no especificados, por lo que esta búsqueda con caracteres comodín devolverá cualquier nombre de archivo que incluya la extensión .csv.

  9. Guarde y ejecute el script.

    El script imprime la lista de resultados coincidentes. En este caso, se trata de una lista con un solo elemento.

    ['bike_racks.csv']

    Este enfoque funciona para cualquier número de archivos y es una buena forma de obtener todos los archivos del mismo tipo de archivo como una lista y realizar la misma tarea en cada archivo.

    También puede enumerar otros tipos de archivo, como .xlsx, .dbf, etc., o puede hacer coincidir otras partes de la cadena de caracteres de nombre. Por ejemplo, si utiliza la cadena de caracteres comodín "*bike*" se devuelve una lista de todos los nombres de archivo que incluyen bike: ['bike_racks.csv', 'bike_routes.dbf', 'bike_routes.prj', 'bike_routes.sbn', 'bike_routes.sbx', 'bike_routes.shp', 'bike_routes.shx']

  10. Modifique la línea mypath = "C:/Lessons/PythonDesc" para incluir DC.gdb

    mypath = "C:/Lessons/PythonDesc/DC.gdb"

  11. Elimine el parámetro "*.csv" de la función ListFiles.

    files = arcpy.ListFiles()

  12. Guarde y ejecute el script.

    Aparece una lista de resultados.

    Estos son los mismos archivos que puede ver en la carpeta DC.gdb con el Explorador de archivos. La función ListFiles() no es una forma útil de examinar el contenido de una geodatabase, porque los datasets no corresponden a archivos individuales. Afortunadamente, existe una función para enumerar las clases de entidad.

Enumerar clases de entidad en un espacio de trabajo

Las clases de entidad son algunos de los tipos de dataset SIG más utilizados. La función ListFeatureClasses() devuelve una lista de clases de entidad en el espacio de trabajo actual.

  1. Edite la línea mypath = para eliminar /DC.gdb de la ruta.

    mypath = "C:/Lessons/PythonDesc"

    Esto dejará la ruta a la carpeta base para los datos del tutorial.

  2. Edite la línea files = arcpy.ListFiles() para utilizar ListFeatureClasses.

    files = arcpy.ListFeatureClasses()

    El código debería tener este aspecto:

    import arcpy
    mypath = "C:/Lessons/PythonDesc"
    arcpy.env.workspace = mypath
    files = arcpy.ListFeatureClasses()
    print(files)

  3. Guarde y ejecute el script.

    El script imprime una lista con las dos clases de entidad.

    ['bike_routes.shp', 'watersheds.shp']

    En este caso, las clases de entidad son shapefiles. A veces esto puede ser una fuente de confusión. El término "clase de entidad" se utiliza para describir un conjunto homogéneo de entidades, cada una con la misma representación espacial (por ejemplo, puntos, líneas o polígonos) y un conjunto común de atributos. Los dos tipos más comunes de clases de entidad en ArcGIS Pro son los shapefiles y las clases de entidad de geodatabase.

    La función ListFeatureClasses() funciona tanto para shapefiles como para clases de entidad de geodatabase, pero para un espacio de trabajo determinado solo devuelve uno de ellos. Si el espacio de trabajo es una carpeta, la función enumera shapefiles. Cuando el espacio de trabajo es una geodatabase, la función enumera las clases de entidad de geodatabase.

  4. Edite la línea mypath = para agregar /DC.gdb a la ruta.

    mypath = "C:/Lessons/PythonDesc/DC.gdb"

    Esta es la ruta de acceso a la geodatabase de archivos.

    Enumere clases de entidad en la geodatabase.

  5. Guarde y ejecute el script.

    El script imprime una lista de tres clases de entidad.

    ['neighborhoods', 'boundary', 'public_schools']

    La lista no incluye las clases de entidad dentro del dataset de entidades Transportation porque es un espacio de trabajo diferente.

    Puede usar un comodín para filtrar los resultados de ListFeatureClasses(). Por ejemplo, puede obtener todas las clases de entidad que comienzan con una letra determinada. La función también permite filtrar por el tipo de entidad. La sintaxis de la función ListFeatureClasses() es la siguiente:

    ListFeatureClasses ({wild_card}, {feature_type}, {feature_dataset})

    El parámetro feature_type de la función permite limitar el resultado en función del tipo de clase de entidad.

  6. Edite la línea files = arcpy.ListFeatureClasses() para que utilice dos parámetros ("", "POINT").

    files = arcpy.ListFeatureClasses("", "POINT")

    El primer parámetro, wild_card, no se utiliza, pero como los parámetros tienen un orden prescrito, este parámetro se debe omitir. La cadena vacía "" actúa como marcador de posición para indicar que el parámetro no se utiliza. También se puede utilizar la palabra clave de Python None.

    También puede proporcionar parámetros a los que se hace referencia con el nombre, en cuyo caso no es necesario que se respete el orden original. Estas dos alternativas también son formas válidas de escribir la línea:

    files = arcpy.ListFeatureClasses(None, "POINT")

    files = arcpy.ListFeatureClasses(feature_type="POINT")

    También puede utilizar un signo de número como cadena de caracteres ("#") para omitir un parámetro de herramienta. Sin embargo, esto no funciona para funciones que no son herramientas de ArcPy.

    Python distingue entre mayúsculas y minúsculas en su mayor parte, pero las cadenas de caracteres utilizadas en las funciones de ArcPy generalmente no hacen esta distinción. Como resultado, también puede utilizar "Point" o "point" en el parámetro.

    El tercer parámetro que la función puede tomar, feature_dataset, no se utiliza y se puede dejar fuera por completo, ya que viene al final de la secuencia de parámetros.

  7. Guarde y ejecute el script.

    El script imprime la única clase de entidad de puntos en el espacio de trabajo.

    ['public_schools']

Enumerar tablas y datasets

Ha enumerado archivos y clases de entidad. A continuación, enumerará tablas y datasets de entidades.

  1. Edite la línea mypath = para eliminar /DC.gdb de la ruta.

    mypath = "C:/Lessons/PythonDesc"

    Esto dejará la ruta a la carpeta base para los datos del tutorial.

  2. Edite la línea files = arcpy.ListFeatureClasses(feature_type="POINT") para que sea ListTables().

    files = arcpy.ListTables()

    El código debería tener este aspecto:

    import arcpy
    mypath = "C:/Lessons/PythonDesc"
    arcpy.env.workspace = mypath
    files = arcpy.ListTables()
    print(files)

    Enumere las tablas de la carpeta.

  3. Guarde y ejecute el script.

    El script imprime la lista de las dos tablas del espacio de trabajo.

    ['gardens.dbf', 'bike_racks.csv']

  4. Edite la línea mypath = para agregar /DC.gdb a la ruta.

    mypath = "C:/Lessons/PythonDesc/DC.gdb"

    Esto establece la ruta a la geodatabase.

    import arcpy
    mypath = "C:/Lessons/PythonDesc/DC.gdb"
    arcpy.env.workspace = mypath
    files = arcpy.ListTables()
    print(files)

  5. Guarde y ejecute el script.

    El script imprime la lista con la única tabla de la geodatabase.

    ['car_share_locations']

  6. Edite la línea files = arcpy.ListTables() para que sea ListDatasets().

    files = arcpy.ListDatasets()

    import arcpy
    mypath = "C:/Lessons/PythonDesc/DC.gdb"
    arcpy.env.workspace = mypath
    files = arcpy.ListDatasets()
    print(files)

  7. Guarde y ejecute el script.

    El script imprime la lista con el único dataset de entidades de la geodatabase.

    ['Transportation']

  8. Edite la línea mypath = para agregar /Transportation a la ruta.

    mypath = "C:/Lessons/PythonDesc/DC.gdb/Transportation"

    Esto establece la ruta al dataset de entidades Transporte.

    import arcpy
    mypath = "C:/Lessons/PythonDesc/DC.gdb/Transportation"
    arcpy.env.workspace = mypath
    files = arcpy.ListDatasets()
    print(files)

  9. Guarde y ejecute el script.

    El script imprime la lista con el dataset de red único en el dataset Transporte.

    ['traffic']

    La función ListDatasets() funciona con una variedad de elementos de datos, incluidos los datasets de entidades, las redes geométricas, las redes, la estructura de parcelas, los catálogos de ráster, la topología y otros.

Ahora que ha visto cómo utilizar las funciones de lista para crear un inventario de datos, utilizará la lista resultante para describir cada elemento de la lista.

Iterar en una lista

Normalmente, crear una lista de datos es el primer paso de un flujo de trabajo más grande. En la mayoría de los casos, desea realizar algún tipo de tarea en cada dataset. Utilizará un bucle Python for para iterar en una lista.

Empezará con un nuevo script.

  1. Haga clic en Archivo y en Guardar como.
  2. Asigne al nuevo archivo el nombre iterate_data.py.
  3. Edite la línea mypath = para eliminar /Transportation de la ruta.

    mypath = "C:/Lessons/PythonDesc/DC.gdb"

  4. Edite la línea files = arcpy.ListDatasets() para que utilizar la función ListFeatureClasses.

    files = arcpy.ListFeatureClasses()

  5. Reemplace la línea print(files) por for file in files: y pulse la tecla Intro.

    Los dos puntos al final de la línea indican el inicio de un bloque de código. El bucle for recorre en iteración los elementos de la lista y el código con sangría del bloque de código se ejecuta para cada elemento. Cuando pulsa Intro después de una línea de código que termina en dos puntos, se aplica sangría a la siguiente línea de código automáticamente.

    En cada ciclo, a la variable temporal file se le asigna uno de los nombres de la lista de archivos de la variable files.

  6. En la línea nueva con sangría, agregue lo siguiente:

    desc = arcpy.da.Describe(file)

    La función da.Describe() devuelve un diccionario con las propiedades de las clases de entidad. Esta línea de código se ejecutará para cada clase de entidad en la lista de clases de entidad.

  7. Pulse Intro y agregue lo siguiente:

    print(desc["baseName"])

    La sangría que debe aplicarse a esta línea son cuatro espacios para que coincida con la línea anterior. Forma parte del bloque de código de bucle for y se ejecutará con cada clase de entidad de la lista.

    Esta línea recupera e imprime el valor almacenado en el diccionario desc utilizando la clave baseName.

    El código completo es el siguiente:

    import arcpy
    mypath = "C:/Lessons/PythonDesc/DC.gdb"
    arcpy.env.workspace = mypath
    files = arcpy.ListFeatureClasses()
    for file in files:
        desc = arcpy.da.Describe(file)
        print(desc["baseName"])

    Imprima las descripciones.

  8. Guarde y ejecute el script.

    El script imprime el nombre de las tres clases de entidad en tres líneas nuevas.

    neighborhoods
    boundary
    public_schools

    Modificará el código para hacer que los resultados sean más informativos.

  9. Edite la línea print(desc["baseName"]) para que sea name = desc["baseName"].

    En lugar de imprimir el nombre, esta línea lo almacena en la variable name.

    Aún hay que aplicar sangría a esta línea para que coincida con la línea anterior del bloque de código de manera que se ejecute en cada ciclo del bucle.

  10. Agregue las tres líneas siguientes:

        data = desc["dataType"]
        shape = desc["shapeType"]
        print(f"{name} is a {data} with {shape} geometry")

    Este código almacena el tipo de datos y los valores de geometría en las variables data y shape.

    La línea final crea e imprime una cadena de caracteres con formato con el contenido de las tres variables sustituidas en ella.

  11. Guarde y ejecute el script.

    El script imprime las tres cadenas de caracteres con formato:

    neighborhoods is a FeatureClass with Polygon geometry
    boundary is a FeatureClass with Polygon geometry
    public_schools is a FeatureClass with Point geometry

Ha enumerado las clases de entidad en la geodatabase, iteradas en la lista, e imprimió información sobre cada una. A continuación, agregará código para rastrear cuántas clases de entidad de cada tipo hay.

Rastrear el número de tipos de clase de entidad

Puede verificar las propiedades de cada clase de entidad y utilizar lógica condicional para determinar qué sucede. En esta sección, usará declaraciones if para contar las clases de entidad por tipo de geometría.

  1. Inserte una nueva línea antes de la línea for file in files:.
  2. Agregue las tres líneas siguientes antes del bucle for:

    count_point = 0
    count_line = 0
    count_poly = 0

    Estas líneas establecen tres variables nuevas en valores cero. Utilizará estas variables para controlar cuántas de cada clase de entidad hay.

    Se establecen en cero antes del bucle for para que en el bucle for pueda agregarlos, dependiendo del tipo de clase de entidad. Si los definió y los estableció en cero dentro del bucle for, cada vez que ejecute el bucle, perderá los datos del ciclo anterior.

  3. Dentro del bucle for, elimine las últimas cuatro líneas.

    Establezca los contadores y corte las líneas en el bucle for.

  4. Dentro del bucle for, después de desc = arcpy.da.Describe(file), agregue las siguientes líneas:

    if desc["shapeType"] == "Point":
        count_point += 1

    Incrementos de contador para puntos

    A la línea if se debería aplicar el mismo nivel de sangría que la línea desc.

    La línea if comprueba si el valor del diccionario de desc almacenado en la clave shapeType es igual que la cadena de caracteres Point.

    En Python, el signo igual doble, ==, se utiliza para comprobar la igualdad, mientras que el signo igual único se utiliza para asignar valores a variables.

    La línea va seguida de dos puntos y a la siguiente línea se aplica sangría porque es un nuevo bloque de código.

    Si la declaración es falsa, no sucede nada. Si la declaración es verdadera, se ejecuta el bloque de código que sigue a la declaración if.

    El bloque de código agrega uno al valor almacenado en la variable count_point. Cuando se ejecuta el bucle, comprueba cada elemento de la lista de clases de entidad para determinar si es una clase de entidad de punto y, si lo es, agrega una. Cuando el bucle termina de ejecutarse, la variable de contador contendrá el recuento del número de clases de entidad de punto.

    Agregará dos declaraciones if más para comprobar otros tipos de geometría.

  5. Al final de la última línea de código, pulse Intro.

    La nueva línea se alinea con la sangría existente en el bloque de código actual. Sin embargo, desea que la siguiente declaración if se alinee en el mismo nivel de sangría con la anterior declaración if.

  6. Pulse la tecla Retroceso.

    Esto ajusta la sangría para alinear la nueva línea con la declaración if anterior.

  7. Agregue las siguientes líneas de código:

    if desc["shapeType"] == "Polyline":
        count_line += 1
    if desc["shapeType"] == "Polygon":
        count_poly += 1

    Las tres declaraciones if están alineadas.

    Puede ajustar la sangría con la tecla Retroceso para eliminar la sangría o agregar cuatro espacios para agregar sangría.

    Ahora, para cada elemento de la lista de archivos, se describirá el elemento, el diccionario de resultados de descripción se almacenará en la variable desc y los datos almacenados en la clave shapeType se comprobarán si concuerdan con las cadenas de caracteres Point, Polyline o Polygon. Cuando ocurre una coincidencia, la variable de contador de esa forma tiene una agregada.

    Ahora agregará algunas líneas para imprimir la información.

  8. Al final del script, agregue una línea de código y pulse Retroceso para eliminar cualquier sangría.
  9. Agregue las siguientes líneas de código:

    print(f"Count of Point feature classes: {count_point}")
    print(f"Count of Polyline feature classes: {count_line}")
    print(f"Count of Polygon feature classes: {count_poly}")

    Script completado para contar geometrías e imprimir resultados

    Como a las tres últimas líneas no se ha aplicado sangría, no forman parte del bloque de código del bucle for y solo se ejecutan después de que se haya completado el bucle y se haya registrado el número de cada tipo de forma.

  10. Guarde y ejecute el script.

    El script imprime las tres líneas siguientes:

    Count of Point feature classes: 1
    Count of Polyline feature classes: 0
    Count of Polygon feature classes: 2

    Esto muestra una forma de utilizar Python para procesar los datos. Primero, obtenga una lista de los datos y, a continuación, utilice esa información para hacer algo con los datos. Este ejemplo simplemente cuenta clases de entidad, pero se puede utilizar un script similar para otras tareas, como copiar todas las clases de entidad poligonal o marcar los atributos de todas las clases de entidad de punto.

Ha imprimido el número de clases de entidad de las tres geometrías. A continuación, verá una forma más compacta de hacer lo mismo.

Obtener recuentos utilizando un filtro de tipo de entidad

Otra forma de obtener los recuentos de clases de entidad en un espacio de trabajo es utilizar la función ListFeatureClasses() con un filtro por tipo de entidad.

  1. Haga clic en Archivo y en Guardar como.
  2. Asigne al nuevo archivo el nombre filter_by_type.py.
  3. Seleccione las líneas entre las tres primeras y las tres últimas líneas del script, haga clic en Formato y en Región marcada con comentarios.

    La sección central del script tiene comentarios.

  4. Agregue una nueva línea después de la sección con comentarios, pero antes de las líneas print.
  5. Agregue las siguientes líneas de código:

    count_point = len(arcpy.ListFeatureClasses(feature_type="POINT"))
    count_line = len(arcpy.ListFeatureClasses(feature_type="POLYLINE"))
    count_poly = len(arcpy.ListFeatureClasses(feature_type="POLYGON"))

    Líneas agregadas al recuento con el filtro feature_type

    Estas tres líneas establecen las variables count_point, count_line y count_poly de una nueva forma.

    En lugar de establecerlas en cero y aumentar sus valores, cada línea aquí utiliza la función ListFeatureClasses() con el parámetro opcional feature_type. Esta función crea una lista de clases de entidad que coinciden con el parámetro de filtro. La función len determina la longitud de la lista resultante, que es un recuento de las clases de entidad de ese tipo.

  6. Guarde y ejecute el script.

    El script imprime las tres líneas siguientes:

    Count of Point feature classes: 1
    Count of Polyline feature classes: 0
    Count of Polygon feature classes: 2

    Si excluimos las líneas con comentarios, esta solución de código es más breve que el enfoque anterior que utiliza da.Describe() para determinar el tipo de geometría. Sin embargo, da.Describe() permite examinar propiedades distintas del tipo de geometría, como el número de campos, la extensión espacial y el sistema de coordenadas.

  7. Cierre el script y la ventana del shell de IDLE.

Ha visto dos enfoques para obtener el recuento de clases de entidad de diferentes tipos e imprimir esa información en el shell de IDLE. A continuación, verá un ejemplo de cómo utilizar estos dos enfoques en un script que enumera y describe el contenido de un espacio de trabajo y escribe los resultados en un archivo de texto.

Escribir información de inventario en un archivo de texto

Aunque imprimir en la ventana interactiva proporciona comentarios de forma inmediata, a veces puede resultar más útil escribir los resultados en un archivo de texto. Un script terminado para esto se encuentra en la carpeta PythonDesc.

  1. En el File Explorer, vaya a la carpeta PythonDesc de la que extrajo los datos.
  2. Haga clic con el botón derecho en write_inventory.py y haga clic en Editar con IDLE (ArcGIS Pro).

    Revisará el script, ajustará la ruta si es necesario y la ejecutará para ver cómo funciona. El script incluye comentarios y líneas vacías para mejorar la legibilidad, pero estos no influyen en la operación de código.

    El script comienza con comentarios que incluyen el autor, la fecha y el propósito. Es una buena práctica agregar notas como estas a los scripts para recordar la finalidad del script y cuándo se creó. Si comparte el script, esta información ayudará a los demás a entender el script y les permitirá saber con quién ponerse en contacto si tienen preguntas.

    Las primeras líneas de código que se ejecutan en el script importan los módulos arcpy y os.

    import arcpy
    import os

    El módulo os le da acceso a las funciones de nivel del sistema operativo a través de Python.

    La siguiente sección establece algunas variables para las rutas y el espacio de trabajo.

    #Variables for paths and workspace
    root = "C:/Lessons/PythonDesc"
    gdb = "DC.gdb"
    textfile = "inventory.txt"
    arcpy.env.workspace = os.path.join (root, gdb)
    output = os.path.join(root, textfile)

    La sección comienza con un comentario que identifica lo que hace esta parte del código. Esta es otra práctica útil para escribir el código Python.

  3. Si extrajo PythonDesc en una ubicación diferente de C:/Lessons/PythonDesc, edite la ruta en la línea root = "C:/Lessons/PythonDesc" para que apunte a la ubicación de la carpeta en su equipo.

    Independientemente de la carpeta raíz, el nombre de la geodatabase de archivos y el nombre del archivo de texto pueden ser el mismo, así como la línea de código que establece arcpy.env.workspace. Al utilizar una variable para la ruta de la carpeta raíz, solo tiene que actualizarla en una ubicación del script. La función os.path.join() se utiliza para crear rutas completas a partir de la variable root, y de las variables gdb y textfile.

    A continuación, se crea un nuevo archivo de texto vacío utilizando la función open() y especificando el modo de escritura mediante el uso de "w". Si ya existe un archivo con este nombre, se sobrescribirá.

    #Create new textfile to write results                  
    f = open(output, "w")

    La siguiente sección del script utiliza la función ListFeatureClasses() para obtener listas de los tres tipos de geometría.

    #Create list of feature classes by geometry type
    points = arcpy.ListFeatureClasses("", "POINT")
    lines = arcpy.ListFeatureClasses("", "POLYLINE")
    polygons = arcpy.ListFeatureClasses("", "POLYGON")

    La siguiente sección del script escribe información contextual en el archivo de texto utilizando cadenas de caracteres con formato. La \n al final de cada una de estas líneas agrega un carácter de escape que codifica una nueva línea, de modo que la información se presentará como tres líneas separadas en el archivo de texto.

    f.write(f"Workspace of interest: {arcpy.env.workspace}\n")
    f.write(f"This workspace contains the following feature classes:\n")
    f.write(f"Count of Point feature classes: {len(points)}\n")

    La tercera de estas líneas utiliza len(points) para insertar la longitud de la lista de puntos, el número de clases de entidad de punto en el espacio de trabajo, en la cadena de caracteres.

    La siguiente línea contiene una declaración if que comprueba si hay elementos en la lista de clases de entidad de punto. Si no hay puntos, no pasa nada hasta la línea f.write siguiente. Sin embargo, si hay clases de entidad de punto, se ejecuta el bloque de código después la línea y el script escribe una nueva cadena de caracteres con formato en el archivo de texto.

    if len(points) != 0:
        f.write(f"The names of the Point feature classes are:\n")
        for point in points:
            desc = arcpy.da.Describe(point)
            f.write(f'\t{desc["baseName"]}\n')
    f.write(f"Count of Polyline feature classes: {len(lines)}\n")

    A continuación, un bucle for procesa cada una de las clases de entidad de punto de la lista.

    Dentro del bucle, la variable desc está configurada de modo que contenga el diccionario de la descripción arcpy.da.Describe de la clase de entidad.

    La siguiente línea escribe una cadena de caracteres con formato con el nombre de la clase de entidad, recuperada del diccionario utilizando la clave baseName. A la línea se aplica una sangría correspondiente a la longitud de tabulación usando el carácter de escape \t y, a continuación, se agrega una nueva línea con \n. A continuación, el bucle se repite para cualquier otra clase de entidad de punto. Cuando no hay más, la línea f.write se ejecuta, agrega el texto que describe el número de clases de entidad de polilínea al archivo de texto e inicia una nueva línea con un \n.

    El resto de esta sección notifica las clases de entidad de polilínea y polígono del mismo modo.

    
    if len(lines) != 0:
        f.write(f"The names of the Polyline feature classes are:\n")
        for line in lines:
            desc = arcpy.da.Describe(line)
            f.write(f'\t{desc["baseName"]}\n')
    f.write(f"Count of Polygon feature classes: {len(polygons)}\n")
    if len(polygons) != 0:
        f.write(f"The names of the Polygon feature classes are:\n")
        for polygon in polygons:
            desc = arcpy.da.Describe(polygon)
            f.write(f'\t{desc["baseName"]}\n')

    Cuando finaliza el bucle para procesar las clases de entidad poligonal, la siguiente línea cierra el archivo de texto.

    f.close()

    La sección final utiliza la función os del módulo startfile para abrir el archivo de texto de informe.

    #Open the resulting output file
    os.startfile(output)

  4. Guarde y ejecute el script.

    El archivo de texto se abre en el Bloc de notas.

    El archivo de texto con resultados se abre en el Bloc de notas.

    Los resultados se escriben en el archivo de texto utilizando el método de archivo write(). El nuevo carácter de línea \n se utiliza para garantizar un formato adecuado con cada resultado en una nueva línea. El carácter de tabulación \t se utiliza para mejorar la legibilidad mediante la sangría de los nombres de las clases de entidad. Se utiliza una barra invertida para estos caracteres especiales.

    En lugar de escribir en un archivo de texto, puede imprimir los resultados en la ventana interactiva reemplazando todas las instancias de f.write por print. Si desea ejecutar el script en ArcGIS Pro como una herramienta de script, puede escribir la información en los mensajes de la herramienta de geoprocesamiento sustituyendo f.write por arcpy.AddMessage.

Revisión

  • El código Python se puede usar para describir las propiedades de los datasets SIG, como el tipo de datos, la extensión de archivo y la geometría.
  • ArcPy incluye varias funciones para crear listas de datasets. Hay funciones específicas disponibles para crear listas de archivos, datasets, tablas y clases de entidad.
  • Al enumerar y describir datasets utilizando código Python, puede crear un inventario detallado de los datasets SIG en un espacio de trabajo. A continuación, puede decidir procesar cada dataset de manera diferente según sus características.
  • El código Python se puede utilizar para escribir información en los archivos de texto. Esto resulta útil para generar informes y para registrar errores.

Puede que también le interesen los cursos de escritura de scripts en Python para ArcGIS Pro y scripts avanzados en Python para ArcGIS Pro, desarrollados por el Dr. Paul A. Zandbergen y publicados por Esri Press.