Найти в Дзене
Old Programmer

Программирование на языке Python. Библиотека os и дерево каталогов (метод walk)

На моем канале много статей и роликов о программировании, здесь вы найдете ссылки на все:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer) Продолжаю начатый разговор о модуле os Python. Рассмотрю только один, но очень важный вопрос о просмотре дерева каталогов. Вообще то это рекурсивная задача (для файловых систем Linux и Windows) и я посвящу ей одну из следующих статей, но в os есть механизм, позволяющий обойтись без рекурсии, во всяком случае на уровне прикладной программы. Использование метода os.walk, позволяющего получить дерево каталогов В модуле os есть метод walk, который возвращает все дерево каталогов, начиная с указанного, в виде списка кортежей. Точнее это все таки не список, а итератор, так что с ним можно работать с помощью обычного цикла. На рисунке 1 представлена часть дерева каталогов моего рабочего компьютера, которое я получил с помощью известной Linux-утилиты tree. Выполним следующую последовательность команд из одного из каталогов на

На моем канале много статей и роликов о программировании, здесь вы найдете ссылки на все:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer)

Продолжаю начатый разговор о модуле os Python. Рассмотрю только один, но очень важный вопрос о просмотре дерева каталогов. Вообще то это рекурсивная задача (для файловых систем Linux и Windows) и я посвящу ей одну из следующих статей, но в os есть механизм, позволяющий обойтись без рекурсии, во всяком случае на уровне прикладной программы.

Использование метода os.walk, позволяющего получить дерево каталогов

В модуле os есть метод walk, который возвращает все дерево каталогов, начиная с указанного, в виде списка кортежей. Точнее это все таки не список, а итератор, так что с ним можно работать с помощью обычного цикла. На рисунке 1 представлена часть дерева каталогов моего рабочего компьютера, которое я получил с помощью известной Linux-утилиты tree.

Рисунок 1. Часть дерева каталогов, созданная утилитой tree
Рисунок 1. Часть дерева каталогов, созданная утилитой tree

Выполним следующую последовательность команд из одного из каталогов на рисунке 1.

for t in os.walk(".."):
print(t)

В результате получим следующую последовательность строк.

('..', ['os.walk', '2', '1', 'os'], [])
('../os.walk', [], ['p72.py'])
('../2', [], ['p2.py', 'p1.py', 'p70.py'])
('../1', [], ['zoom_0.mp4'])
('../os', [], ['p71b.py', 'p71e.py', 'p71a.py', 'p71g.py', 'p71c.py', 'p71h.py', 'p71d.py', 'p71f.py', 'p71.py'])

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

В программе 72.py представлен алгоритм вывода всех файлов и каталогов начиная с заданного. Каталог задается в командной строке. Можно использовать как абсолютный так и относительный путь. Считаю, что вполне на основе этой программы можно разработать утилиту, типа утилиты tree из Linux. Дерзайте.

Ну вот и все, учитесь программно управлять файлами и удача будет сопутствовать вам. Подписываемся на мой канал Old Programmer.

Программа вывода дерева каталогов на консоль, начиная с указанного в командной строке
Программа вывода дерева каталогов на консоль, начиная с указанного в командной строке