Краткая информация
Создает имена данных в структуре каталог/база данных проходом по дереву сверху вниз или снизу вверх. Каждая каталог/рабочая область дает кортеж из трех составляющих: путь к каталогу, имена каталогов и имена файлов.
Обсуждение
Модуль Python os содержит функцию os.walk, которую можно использовать для прохода по дереву директорий и поиску данных. os.walk работает только с файлами и не поддерживает работу с содержимым баз данных, например, классов объектов баз геоданных, таблиц и растров. arcpy.da.Walk можно использовать для создания каталога имеющихся данных.
Синтаксис
Walk (top, {topdown}, {onerror}, {followlinks}, {datatype}, {type})
Параметр | Описание | Тип данных |
top | Рабочая область верхнего уровня, которая будет использована. | String |
topdown | Если для параметра topdown выбрано True или не было указано значение, то кортеж для каталога генерируется до кортежа для любой из его рабочих областей (рабочие области создаются сверху вниз). Если для параметра topdown выбрано значение False, то кортеж для рабочей области создается после создания кортежей для всех её вложенных рабочих областей (рабочие области создаются снизу вверх). Когда для параметра topdown выбрано значение True, то список dirnames может быть изменен на месте, и Walk будет выполнять рекурсивный обход только тех вложенных рабочих областей, имена которых остаются в dirnames. Это может быть полезно для ограничения поиска, установки определенного порядка посещения или даже для информирования Walk о тех каталогах, которые вызывающая сторона создает или переименовывает перед возобновлением работы Walk. Изменение dirnames в том случае, если topdown установлен как False, неэффективно, поскольку, при режиме снизу вверх, рабочие области в dirnames будут созданы до того, как будет создан сам dirpath. (Значение по умолчанию — True) | Boolean |
onerror | По умолчанию, ошибки игнорируются. Функция onerror будет вызвана с экземпляром OSError. Эта функция может быть использована для отчета об ошибке и продолжения прохода или остановки процесса при получении исключения. Примечание:Имя файла доступно в качестве атрибута filename объекта исключения. (Значение по умолчанию — None) | Function |
followlinks | По умолчанию Walk не проходит файлы подключений. Установите для followlinks значение True для прохода файлов подключений. (Значение по умолчанию — False) | Boolean |
datatype | Тип данных для ограничения возвращаемых результатов. Допустимыми типами данных являются следующие:
Поддерживается множество типов данных, если они вводятся списком или кортежем.
(Значение по умолчанию — None) | String |
type | Типы растровых данных и типы данных объектов могут быть далее ограничены типом.
Допустимыми типами объектов являются следующие:
Следующие типы растров являются корректными:
Поддерживается множество типов данных, если они вводятся списком или кортежем.
(Значение по умолчанию — None) | String |
Тип данных | Описание |
Generator | Выдает кортеж из трех элементов, который включает рабочую область, имена каталогов и имена файлов.
Примечание:Имена в этих списках включают только базовое имя; никакие компоненты пути не включаются. Чтобы получить полный путь (начинающийся с вершины) к файлу или директории в dirpath, выполните os.path.join(dirpath, name). |
Пример кода
Используйте функцию Walk для создания каталога полигональных классов объектов.
import arcpy
import os
workspace = "c:/data"
feature_classes = []
walk = arcpy.da.Walk(workspace, datatype="FeatureClass", type="Polygon")
for dirpath, dirnames, filenames in walk:
for filename in filenames:
feature_classes.append(os.path.join(dirpath, filename))
Используйте функцию Walk для создания каталога растровых данных. Любые растры в папке с именем back_up будут проигнорированы.
import arcpy
import os
workspace = "c:/data"
rasters = []
walk = arcpy.da.Walk(workspace, topdown=True, datatype="RasterDataset")
for dirpath, dirnames, filenames in walk:
# Disregard any folder named 'back_up' in creating list of rasters
if "back_up" in dirnames:
dirnames.remove('back_up')
for filename in filenames:
rasters.append(os.path.join(dirpath, filename))