J'ai un script python que j'utilise pour créer une liste de tous les fichiers mxd (avec chemin complet) dans notre dossier Projets. Le script utilise ensuite cela pour parcourir la liste et faire un findandreplaceworkspacepaths sur chaque mxd selon la procédure de ESRI. Je rencontre des problèmes lorsque je frappe un fichier mxd corrompu. Ils ont essayé try / except et ne l'ont pas fait fonctionner. La situation idéale serait d'écrire le nom de fichier corrompu dans un fichier et de continuer pour que je puisse y revenir à la fin. Je suis très nouveau avec les scripts python, toute aide serait grandement appréciée.
import arcpy, os, sys, traceback, time
oldpath = 'W:'
newpath = 'W:\\GIS'
def find(path,pattern):
matches = []
for r,d,f in os.walk(path):
for files in f:
if files.endswith(pattern):
fpath = os.path.join(r,files)
matches.append(fpath)
print (fpath)
return matches
print ("Go: ")
mxdlist = (find('C:\\gis','.mxd'))
print (mxdlist)
print ("Starting Path Conversion")
try:
for mxdold in mxdlist:
mxd = arcpy.mapping.MapDocument(mxdold)
mxd.findAndReplaceWorkspacePaths(oldpath, newpath)
time.sleep(6)
mxd.save()
time.sleep(6)
print (mxdold)
del mxd
except arcpy.ExecuteError:
arcpy.AddError(arcpy.GetMessages(2))
except:
arcpy.AddError("Non-tool error occurred")
la source
'w'
(rite) - utilisez'a'
plutôt (ppend) comme s'il y avait plus d'un mxd corrompu que vous écraseriez à chaque fois. En outre, cela peut être exagéré, mais lelogging
module Python peut valoir la peine d'être examiné pour enregistrer les erreurs.'a'
à ajouter.Cela n'a rien à voir avec votre erreur sur les MXD corrompus, mais puisque vous voulez vous connecter, voici un petit nugget à nu (à peu près directement à partir des documents Python) utilisant le
logging
module (comme suggéré par @om_henners). Le commentaire de @sgillies ci-dessus semble également excellent.Lorsqu'il est exécuté tel quel, il donne:
la source