5 votos

¿Creación de circuito para reemplazar texto en el diseño de la página de múltiples MGDS en vez de uno MXD a la vez?

He encontrado algo de código en una página web que realice una búsqueda y reemplazar elementos de texto de diseño de página. Actualmente usted puede solo hacerlo un MXD en un momento. Tenía la esperanza de cambiar el código para que pueda hacer una búsqueda y reemplazar en una carpeta con un montón de MGDS en él.

El guión está por debajo. Sé que necesito un bucle, simplemente no está seguro cómo hacerlo; nunca programado antes.

import arcpy, string, os 

#Read input parameters from script tool
Path = arcpy.GetParameterAsText(0)
oldText = arcpy.GetParameterAsText(1)
newText = arcpy.GetParameterAsText(2)
case = arcpy.GetParameter(3)
exact = arcpy.GetParameter(4)
outputMXD = arcpy.GetParameterAsText(5)

try:
    #Referent the map document
    mxd = arcpy.mapping.MapDocument(mxdPath)         

    #Find all page layout text elements
    for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):     
        if exact:
            if case:
                if oldText == elm.text:
                    elmText = elm.text.replace(oldText, newText)
                    elm.text = elmText
            else:
                if oldText.upper() == elm.text.upper():
                    elmText = elm.text.upper().replace(oldText, newText)
                    elm.text = elmText   
        else:
            if case:
                if oldText in elm.text:
                    elmText = elm.text.replace(oldText, newText)
                    elm.text = elmText
            else:
                if oldText.upper() in elm.text.upper():
                    elmText = elm.text.upper().replace(oldText, newText)
                    elm.text = elmText                  
    mxd.saveACopy(outputMXD)

    del mxd

except Exception, e:
    import traceback
    map(arcpy.AddError, traceback.format_exc().split("\n"))
    arcpy.AddError(str(e))

6voto

Daniel Broekman Puntos 1951

La Actualización y fijación de las fuentes de datos con arcpy.la asignación de tema de ayuda tiene un ejemplo de cómo recorrer .mxd en una carpeta (así como otros útiles de arcpy ejemplos), pero mi preferencia por cómo hacer esto sería el uso de pegote. Algo como esto:

import glob
mxdList = glob.glob('*.mxd')
for mxd in mxdList:
    <put everything from your try/except block here>

Esto supone que la secuencia de comandos se ejecuta desde la carpeta donde tienes todos tus .mxd. También se podría organizar esto un poco mejor, con un par de funciones, pero que probablemente más allá del alcance de esta pregunta.

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