5 votos

¿Utilizar arcpy.mapping para listar las capas de datos rotas?

Quiero listar todos los enlaces rotos en todos los mxds en una unidad de servidor. Pero siempre que lo intento me sale un error. Puede alguien usar un ejemplo específico, digamos que la unidad es la unidad D, cómo lo pondría en el script de ESRIs aquí:

import arcpy, os
path = r"C:\Project"
for fileName in os.listdir(path):
fullPath = os.path.join(path, fileName)
if os.path.isfile(fullPath):
    basename, extension = os.path.splitext(fullPath)
    if extension == ".mxd":
        mxd = arcpy.mapping.MapDocument(fullPath)
        print "MXD: " + fileName
        brknList = arcpy.mapping.ListBrokenDataSources(mxd)
        for brknItem in brknList:
            print "\t" + brknItem.name
del mxd

Además no estoy acostumbrado a no tener pythonwin, ¿alguien sabe dónde d/l? Lo busqué en Google pero me decía que lo instalara desde el cd de ArcMap (sólo estoy usando un ordenador del trabajo).

8voto

John Nolan Puntos 16633

La siguiente versión actualizada de la muestra de ESRI debería funcionar. Buscará recursivamente en todos los directorios por debajo de D: los archivos .mxd. imprimirá sus nombres y si alguna capa de datos está rota imprimirá los nombres de las capas de datos rotas.

import arcpy, os
path = r"D:"
for root, dirs, files in os.walk(path):
    for fileName in files:
        basename, extension = os.path.splitext(fileName)
        if extension == ".mxd":
            fullPath = os.path.join(path, fileName)
            mxd = arcpy.mapping.MapDocument(fullPath)
            print "MXD: " + fileName
            brknList = arcpy.mapping.ListBrokenDataSources(mxd)
            for brknItem in brknList:
                print "\t" + brknItem.name

Para escribir en un archivo en lugar de imprimir en la consola:

import arcpy, os
path = r"D:"
f = open('somefile.txt', 'r')
for root, dirs, files in os.walk(path):
    for fileName in files:
        basename, extension = os.path.splitext(fileName)
        if extension == ".mxd":
            fullPath = os.path.join(path, fileName)
            mxd = arcpy.mapping.MapDocument(fullPath)
            f.write("MXD: " + fileName + "\n")
            brknList = arcpy.mapping.ListBrokenDataSources(mxd)
            for brknItem in brknList:
                f.write("\t" + brknItem.name + "\n")
f.close()

1voto

jonathanconway Puntos 288

Esta es una ligera variación, me funcionó para Layer y MXD's

import arcpy, os
path = r"N:\Deliverables Mirror\WEBSITE_DATASET"
for root, dirs, files in os.walk(path):
    for fileName in files:
        basename, extension = os.path.splitext(fileName)
        if extension == ".mxd":
            fullPath = os.path.join(root, fileName)
            mxd = arcpy.mapping.MapDocument(fullPath)
            brknList = arcpy.mapping.ListBrokenDataSources(mxd)
            for brknItem in brknList:
                print "MXD: " + fullPath
                print "\t" + brknItem.name

import arcpy, os
path = r"N:\Deliverables Mirror\WEBSITE_DATASET"
for root, dirs, files in os.walk(path):
    for fileName in files:
        basename, extension = os.path.splitext(fileName)
        if extension == ".lyr":
            fullPath = os.path.join(root, fileName)
            mxd = arcpy.mapping.MapDocument(fullPath)
            brknList = arcpy.mapping.ListBrokenDataSources(mxd)
            for brknItem in brknList:
                print "LYR: " + fullPath
                print "\t" + brknItem.name

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