Walk (arcpy.da)
Резюме
Создает имена данных в дереве каталога, проходя дерево сверху вниз или снизу вверх. Каждая директория/рабочая область в дереве выдает кортеж из трех элементов: dirpath, dirnames и filenames.
Обсуждение
Функция Проход (Walk) стала доступной в пакете обновлений ArcGIS 10.1 Service Pack 1.
Модуль os в Python включает функцию os.walk, которая может быть использована для прохода дерева директории и поиска данных. Функция os.walk является файловой и не распознает содержимое базы данных, такое как классы объектов базы геоданных, таблицы или растры. Для создания каталога данных может быть использована arcpy.da.Walk.
Синтаксис
Параметр | Объяснение | Тип данных |
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 объекта исключения exception. (Значение по умолчанию — None) | Function |
followlinks | По умолчанию Walk() не проходит файлы подключения. Установите followlinks на значение Истина (True), чтобы проходить файлы подключения. (Значение по умолчанию — False) | Boolean |
datatype | Тип данных для ограничения возвращаемых результатов. Допустимыми типами данных являются следующие:
Поддерживается множество типов данных, если они вводятся списком или кортежем.
(Значение по умолчанию — None) | String |
type | Типы растровых данных и типы данных объектов могут быть далее ограничены типом.
Доступные типы объектов:
Следующие типы растров являются корректными:
Поддерживается множество типов данных, если они вводятся списком или кортежем.
(Значение по умолчанию — None) | String |
Тип данных | Объяснение |
Generator | Выдает кортеж из трех элементов, который включает рабочую область, имена директорий и имена файлов (dirpath, dirnames и filenames).
Примечание: Имена в этих списках включают только базовое имя; никакие компоненты пути не включаются. Чтобы получить полный путь (начинающийся с вершины) для файла или директории в dirpath, выполните os.path.join(dirpath, name). |
Пример кода
Используйте функцию Проход (Walk) для создания каталога полигональных классов объектов.
import arcpy
import os
workspace = "c:/data"
feature_classes = []
for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
datatype="FeatureClass",
type="Polygon"):
for filename in filenames:
feature_classes.append(os.path.join(dirpath, filename))
Используйте функцию Проход (Walk) для создания каталога растровых данных. Любые растры в папке с именем back_up будут проигнорированы.
import arcpy
import os
workspace = "c:/data"
rasters = []
for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
topdown=True,
datatype="Raster"):
# 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))