PYTHON GIS / EXCEL - Cómo listar elementos vacíos en la base de datos

0

 

Aprende como usar Python (ArcPy) para exportar una lista de los elementos vacíos en tus bases de datos apoyado con excel


En este articulo aprenderás como hacer una lista de los features vacíos dentro de una base de datos espacial utilizando Python de manera sencilla.


Si necesitas hacer un control de los elementos contenidos en la base de datos que has venido desarrollando durante la ejecución de un proyecto, saber qué elementos están vacíos puede ser de mucha ayuda, ya sea para llenarlos o borrarlos, y hasta donde sé, no existe forma de hacer esto directamente en ArcGIS.


Cómo hacer una lista de los features vacíos en una base de datos espacial (File geodatabase .gdb o Personal geodatabase .mdb)


Paso 0: Haz un respaldo de la base de datos (Nunca se sabe que pueda pasar).


Paso 1: Identificar la ruta que representa la base de datos a examinar en el explorador del sistema operativo.


Paso 2: Abrir ArcMap (Un archivo mxd en blanco).


Paso 3: Abrir la ventana Python en la barra de herramientas Standard.


Muestra la ubicación de la ventana Python dentro de la barra de herramientas Standard (estándar)


Paso 4: Copiar en un blog de notas el siguiente código y reemplazar el texto C:\EJEMPLO\EJEMPLO.GDB en la línea #07 por la ruta de la base de datos identificada en el paso 1. Por otro lado reemplazar en la línea #05 C:\EJEMPLO por la ruta donde se guardara la lista en formato .txt. Si deseas modificar el nombre del archivo de salida, puedes cambiar la palabra "List" en la línea #06 por el nombre de tu preferencia (Sin quitar las comillas).


NOTA IMPORTANTE: Este script siempre me ha dado problemas usando rutas muy largas por lo que recomiendo trabajar en una carpeta en la raíz de una unidad de almacenamiento (a).



Ejemplo de donde ubicar la base de datos dentro de una unidad de almacenamiento






import arcpy, os                                                                                  #01
import sys                                                                                        #02
reload(sys)                                                                                       #03
sys.setdefaultencoding("utf-8")                                                                   #04
outputDir = r"C:\EJEMPLO"                                                                         #05
outputName = "List"                                                                               #06
A = r"C:\EJEMPLO\EJEMPLO.gdb"                                                                     #07
textFile = (outputDir + os.sep + outputName + ".txt")                                             #08
outFile = open(textFile, "w")                                                                     #09
def listFcsInGDB(gdb):                                                                            #10
    arcpy.env.workspace = gdb                                                                     #11
    tables = arcpy.ListTables()                                                                   #12
    for table in tables:                                                                          #13
        outFile.write("{0}, {1}".format(table, arcpy.GetCount_management(table)) + "\n" )         #14
    for fds in arcpy.ListDatasets('','feature') + ['']:                                           #15
        for fc in arcpy.ListFeatureClasses('','',fds):                                            #16
            outFile.write("{0}, {1}, {2}".format(fds, fc, arcpy.GetCount_management(fc)) + "\n" ) #17
gdb = A                                                                                           #18
fcs = listFcsInGDB(gdb)                                                                           #19
outFile.close()                                                                                   #20
import fileinput                                                                                  #21
headers = 'FEATURE_DATASET, FEATURE_CLASS, NUMBER_OF_ELEMENTS'.split()                            #22
for line in fileinput.input([outputDir + os.sep + outputName + ".txt"], inplace=True):            #23
    if fileinput.isfirstline():                                                                   #24
        print '\t'.join(headers)                                                                  #25
    print line,                                                                                   #26
                                                                                            



Paso 5: Copiar el código modificado en la ventana Python y presionar la tecla Enter o Intro dos veces.


Paso 6: Una vez generado el archivo .txt (a), ábrelo, selecciona todo con CTR+E (b) y copia el texto con CTR+C (c).


Muestra grafica del resultado del archivo de texto y ejemplo de como copiar el contenido


Paso 7: Abre un archivo de Excel, en el apartado importación de texto selecciona como separador el carácter coma (,) tal como se muestra en la siguiente imagen.


Ejemplo de como importar el contenido del archivo de texto a excel


Paso 8: Aplicar un filtro en las columnas resultantes en Excel, los elementos que queden en la última columna con un cero (0) son los elementos que están vacíos en la base de datos.


Ejemplo de como obtener el listado de los elementos vacíos en Excel



NOTAS:


  • Si dentro de la base de datos hay feature dataset, deberas desplazar hacia la columna derecha los elementos listados que esten fuera de los dataset, por ejemplo las tablas y features que no pertenezcan a un dataset (Ver siguiente imagen).


Ejemplo de como organizar los datos obtenidos del archivo de texto



De esta forma tendrás un listado de los elementos vacíos almacenados en la GDB, una vez hechas todas tus verificaciones puedes necesitar borrar masivamente varios elementos vacíos, por tal motivo te invito a pasar por mi artículo, Eliminar features vacíos en la base de datos.


Espero hayas disfrutado este artículo, próximamente subiré un video explicativo del procedimiento que podrás consultar en este blog. Guarda mi blog entre tus enlaces favoritos, estaré subiendo muchos más trucos de este estilo, recuerda que puedes hacer llegarme tus inquietudes en la página de contacto o deja tu comentario, estaré atento a responder.




Entradas que pueden interesarte

Sin comentarios