Walk

Краткая информация

Создает имена данных в структуре каталог/база данных проходом по дереву сверху вниз или снизу вверх. Каждая каталог/рабочая область дает кортеж из трех составляющих: путь к каталогу, имена каталогов и имена файлов.

Обсуждение

Модуль 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

Тип данных для ограничения возвращаемых результатов. Допустимыми типами данных являются следующие:

  • AnyВозвращаются все типы данных. Эквивалентно использованию None или пропуску аргумента.
  • CadDrawing
  • CadastralFabric
  • Container
  • FeatureClass
  • FeatureDataset
  • GeometricNetwork
  • LasDataset
  • Layer
  • Locator
  • Map
  • MosaicDataset
  • NetworkDataset
  • PlanarGraph
  • RasterCatalog
  • RasterDataset
  • RelationshipClass
  • RepresentationClass
  • Style
  • Table
  • Terrain
  • Text
  • Tin
  • Tool
  • Toolbox
  • Topology

Поддерживается множество типов данных, если они вводятся списком или кортежем.

for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
    datatype=['MosaicDataset', 'RasterDataset']):

(Значение по умолчанию — None)

String
type

Типы растровых данных и типы данных объектов могут быть далее ограничены типом.

  • AllВозвращаются все типы. Эквивалентно использованию None или пропуску аргумента.
  • AnyВозвращаются все типы. Эквивалентно использованию None или пропуску аргумента.

Допустимыми типами объектов являются следующие:

  • Multipatch Возвращаются только классы объектов мультипатч.
  • MultipointВозвращаются только классы мультиточечных объектов.
  • PointВозвращаются только классы точечных объектов.
  • PolygonВозвращаются только классы полигональных объектов.
  • PolylineВозвращаются только классы полилинейных объектов.

Следующие типы растров являются корректными:

  • BIL Файл Esri Band Interleaved by Line
  • BIP Файл Esri Band Interleaved by Pixel
  • BMP Формат битовой графики для наборов растровых данных
  • BSQ Файл Esri Band Sequential
  • DAT Файл ENVI DAT
  • GIF Графический обменный формат для наборов растровых данных
  • GRID Формат наборов растровых данных Esri Grid
  • IMG Формат растровых данных ERDAS IMAGINE
  • JP2 Формат наборов растровых данных JPEG 2000
  • JPG Формат наборов растровых данных Joint Photographic Experts Group
  • PNG Формат наборов растровых данных Portable Network Graphic
  • TIF Теговый формат файла изображения для набора растровых данных

Поддерживается множество типов данных, если они вводятся списком или кортежем.

for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
    datatype='FeatureClass', type=['Polygon', 'Polyline']):

(Значение по умолчанию — None)

String
Возвращаемое значение
Тип данныхОписание
Generator

Выдает кортеж из трех элементов, который включает рабочую область, имена каталогов и имена файлов.

  • dirpath – путь к рабочей области в виде текстовой строки.
  • dirnames представляет собой список имен подкаталогов и других рабочих областей в dirpath.
  • filenames представляет собой список имен ресурсов, не являющихся рабочими областями, в dirpath.
Примечание:

Имена в этих списках включают только базовое имя; никакие компоненты пути не включаются. Чтобы получить полный путь (начинающийся с вершины) к файлу или директории в dirpath, выполните os.path.join(dirpath, name).

Пример кода

Walk. Пример 1

Используйте функцию 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 пример 2

Используйте функцию 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))

Связанные разделы