2016-12-08 3 views
-1

Я пытаюсь экспортировать все мои карты, которые находятся в моих подкаталогах.Прогулка в подкаталоги не wokring

У меня есть код для экспорта, но я не могу понять, где добавить цикл, который заставит его делать это для всех подкаталогов. На данный момент он экспортирует карты в каталог, но не вложенные папки.

import arcpy, os 

arcpy.env.workspace = ws = r"C:\Users\162708\Desktop\Burn_Zones" 

for subdir, dirs, files in os.walk(ws): 

    for file in files: 

     mxd_list = arcpy.ListFiles("*.mxd") 

     for mxd in mxd_list: 

      current_mxd = arcpy.mapping.MapDocument(os.path.join(ws, mxd)) 
      pdf_name = mxd[:-4] + ".pdf" 
      arcpy.mapping.ExportToPDF(current_mxd, pdf_name) 

     del mxd_list 

Что я делаю неправильно, что он не может выполнять итерацию по подпапкам?

Спасибо!

+0

Я не верю, что 'os.walk' изменяет рабочий каталог. 'os.path.join (subdir, '* .mxd')' может заменить '* * .mxd'' в вашем коде, или вы можете' os.chdir (subdir) ' –

+0

@Добаны вы не знакомы с функциональностью 'os.walk'? https://docs.python.org/3/library/os.html#os.walk –

ответ

0

Итерации через результат os.walk вы должны давать кортежи, содержащие (path, dirs, files) (первый в кортеже - это текущий путь, который содержит files, поэтому я склонен назвать его таким образом). Текущий каталог не изменяется автоматически, поэтому вам необходимо включить его в пути вы придающего arcpy.ListFiles так:

arcpy.ListFiles(os.path.join(path, "*.mxd")) 

Вы должны также удалить петлю for file in files. Кажется, что вы экспортируете файлы в каталог, поэтому зачем каждый раз экспортировать весь каталог для каждого файла?

Также вы должны изменить arcpy.mapping.MapDocument(os.path.join(ws, mxd)) на arcpy.mapping.MapDocument(os.path.join(path, mxd)), где path - это первый элемент от os.walk.