Ich habe ein Python-Skript, mit dem ich eine Liste aller MXD-Dateien (mit vollständigem Pfad) in unserem Projektordner erstelle. Das Skript verwendet dies dann, um die Liste zu durchlaufen und auf jedem mxd nach ESRIs Vorgehensweise einen Arbeitspfad zu finden und zu ersetzen. Ich habe Probleme, wenn ich auf eine beschädigte MXD-Datei stoße. Die haben versucht / außer und haben es nicht zum Laufen gebracht. Die ideale Situation wäre, den beschädigten Dateinamen in eine Datei zu schreiben und fortzufahren, damit ich am Ende darauf zurückkommen kann. Ich bin sehr neu in Python-Skripten, jede Hilfe wäre sehr dankbar.
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")
quelle
'w'
(rite) - verwenden'a'
Sie stattdessen (ppend), als ob es mehr als einen beschädigten mxd gibt, den Sie jedes Mal überschreiben werden. Es kann auch übertrieben sein, aber das Python-logging
Modul ist möglicherweise einen Blick wert, um Fehler aufzuzeichnen.'a'
zum Anhängen wurde korrigiert.Dies hat nichts mit Ihrem Fehler auf den beschädigten MXDs zu tun. Da Sie sich jedoch anmelden möchten, finden Sie hier ein kleines Nugget (ziemlich direkt aus den Python-Dokumenten), das das
logging
Modul verwendet (wie von @om_henners vorgeschlagen). @sgillies Kommentar oben sieht auch ausgezeichnet aus.Wenn es so ausgeführt wird, wie es ist, gibt es:
quelle