24 votos

¿Cómo hacer un inventario SIG?

Mi oficina experimentará un gran cambio en su sección de SIG. Esta sección lleva funcionando desde los años 80 y cuenta con una enorme colección de datos SIG (es decir, shapefiles, archivos raster, datos, etc.), pero nunca ha sido objeto de ningún inventario. Ahora se hará.

¿Existe alguna forma automatizada de extraer toda la información sobre los datos del SIG (es decir, shapefile, cobertura arc-info, archivo de capas, *.mxd, gdb, archivo raster, etc.) de un PC a un archivo Excel? La información puede incluir la fecha de creación, la fecha de la última edición, el nombre de la carpeta o contenedor, etc.

20voto

auramo Puntos 161

Esto funciona para mí, utilizando el arcpy.da.Walk función en ArcGIS 10.1 SP1:

import arcpy, csv, os

workspace = r"c:\GISData"
output = r"C:\temp\test.csv"

with open(output, 'wb') as csvfile:
    csvwriter = csv.writer(csvfile)
    for dirpath, dirnames, filenames in arcpy.da.Walk(workspace):
        for filename in filenames:
            desc = arcpy.Describe(os.path.join(dirpath, filename))
            csvwriter.writerow([desc.catalogPath, desc.name, desc.dataType])

En csv también se utiliza para simplificar la escritura del archivo de salida. Excel puede abrir archivos CSV para que puedas verlos como hojas de cálculo.

Véase el arcpy.Describe para ver las propiedades adicionales que puede incluir en la salida.

Si lo que desea es extraer información de la base de datos metadatos Consulte la secuencia de comandos en esta respuesta: Crear una tabla que contenga todos los nombres de archivos (y posiblemente metadatos) en una Geodatabase de Archivos

10voto

GreyCat Puntos 146

Cuando usas Python, debes utilizar los módulos correctos para hacer lo que quieres. Para encontrar todos los archivos en un directorio con extensión shp, por ejemplo, hay soluciones mucho más simples que se presentó sin la ruptura, que es horrible ...(como la solución presentada por Nathan W, pero hay muchos, muchos otros, sólo tiene que buscar en Internet)

Algunos ejemplos con módulos relevantes:

1) con el módulo glob:

sólo shapefiles:

import glob
import os
os.chdir("mydir")
for files in glob.glob("*.shp"):
    print files

shapefiles y geodatabases:

import glob
types = ('*.shp', '*.gbd') # the tuple of file types
files_grabbed = []
for files in types:
     files_grabbed.extend(glob.glob(files)) #files_grabbed = the list of shp and gbd files

si desea buscar también en los subdirectorios:

import glob
for f in glob.iglob("/mydir/*/*.shp"): #search immediate subdirectories 
    print f

2) con os.listdir y comprensión de listas (en dos líneas) -> lista de resultados

path = 'mydir'
shape_files = [f for f in os.listdir(path) if f.endswith('.shp')]
gdb_files = [f for f in os.listdir(path) if f.endswith('.gdb')]

3) con el módulo fnmatch:

import fnmatch
for file in os.listdir('path'):
    if fnmatch.fnmatch(file, '*.shp'):
        print file

y muchas otras soluciones, recursivas, etc.

5voto

Blue Puntos 134

Gracias artwork21 y Nathan W por vuestra respuesta. Y sí código de Nathen hizo la magia.

import os, arcpy

#create blank text file
with open("C:\\Temp\\GISlayers.txt", "w") as txt:
for root, dirs, files in os.walk("C:\\Temp\\temp"):
    for f in files:
        #look for shapefiles
        if f.endswith('.shp'):
            desc = arcpy.Describe(root + "\\" + f)
            #write info to text file
            txt.write(desc.name + "," + desc.catalogPath + "\n")

        #look for file geodatabases
        if f.endswith('.gdb'):
            desc = arcpy.Describe(root)
            for child in desc.children:
                #write info to text file
                txt.write(child.name + "," + child.path + "\n")

        #look for layer files
        if f.endswith('.lyr'):
            desc = arcpy.Describe(root + "\\" + f)
            #write info to text file
            txt.write(desc.name + "," + desc.catalogPath + "\n")

        #look for img file
        if f.endswith('.img'):
            desc = arcpy.Describe(root + "\\" + f)
            #write info to text file
            txt.write(desc.name + "," + desc.catalogPath + "\n")

Sólo el nombre del archivo y la ubicación. El PC con el que voy a trabajar tiene muchos archivos de cobertura (el archivo arc-info), ¿funcionará también con ellos?

4voto

Hameno Puntos 129

Si usted tiene ArcGIS Desktop 10.0 (o cualquiera de sus service packs), creo que su mejor apuesta es escribir un script en python que utiliza os.walk para mirar a través de un directorio definido GIS y busca extensiones comunes de archivos GIS como .shp, .gdb, .mdb, etc ... y escribe el resultado en un archivo de texto delimitado por comas. A continuación, puede traer el archivo de texto en Excel, ver ejemplo de código a continuación:

import os, arcpy

#create blank text file
txt = open("C:\\Temp\\GISlayers.txt", "w")

for root, dirs, files in os.walk("C:\\Temp\\temp"):
    for f in files:

        #look for shapefiles
        foundSHP = f.find(".shp")
        if foundSHP >0:
            checkEXT = f[-3:]
                if checkEXT <> "xml":
                    desc = arcpy.Describe(root + "\\" + f)
                    #write info to text file
                    txt.write(desc.name + "," + desc.catalogPath + "\n")

        #look for file geodatabases
        foundGDB = f.find(".gdb")
        if foundGDB >0:
            desc = arcpy.Describe(root)
            for child in desc.children:
            #write info to text file
            txt.write(child.name + "," + child.path + "\n")
        break
txt.close()

Si está utilizando ArcGIS 10.1 (o posterior) para Desktop entonces hay otra Respuesta aquí que utiliza arcpy.da.Walk que no estaba disponible en 10.0 o anterior.

0voto

Amy Puntos 46

Si quieres evitar la programación, éste puede ser el método más fácil y rápido.

Existe un complemento para Excel llamado ASAP Utilidades . Hay un 90 días de prueba gratuita pero después de eso, es de $ 49 USD para uso empresarial. Es gratuito para estudiantes o uso personal. El complemento añade muchas funciones útiles. Una de ellas es crear una lista de archivos en una estructura de carpetas. También proporciona las propiedades de los archivos. Si lo desea, puede limitar los resultados por tipo de archivo.

He aquí una vídeo de cómo hacerlo.

Ya he utilizado este complemento en otras ocasiones y los resultados son muy rápidos.

Tenga en cuenta que no estoy afiliado a esta empresa de software.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X