У меня есть скрипт Python, который я использую для создания списка всех файлов MXD (с полным путем) в нашей папке Projects. Затем сценарий использует это для итерации по списку и выполнения findandreplaceworkspacepath для каждого mxd в соответствии с инструкциями ESRI. Я сталкиваюсь с проблемами, когда я ударил поврежденный файл MXD. Они пытались попробовать / кроме, и не получили его на работу. Идеальная ситуация - записать поврежденное имя файла в файл и двигаться дальше, чтобы я мог вернуться к ним в конце. Я очень новичок в написании скриптов на Python, любая помощь будет принята с благодарностью.
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")
источник
'w'
(rite) - используйте'a'
вместо него (ppend), как будто существует более одного поврежденного mxd, который вы будете перезаписывать каждый раз. Кроме того, это может быть излишним, ноlogging
модуль Python, возможно, стоит посмотреть, чтобы записывать ошибки.'a'
чтобы добавить.Это не имеет ничего общего с вашей ошибкой в поврежденных MXD, но, поскольку вы хотите войти в систему, вот небольшой слепок (в значительной степени прямо из документации по Python) с использованием
logging
модуля (как предложено @om_henners). Комментарий @sgillies выше выглядит также отлично.При запуске как есть, это дает:
источник