Функция os.walk() в Python используется для генерации имен файлов в индексном дереве файлов путем обхода сверху вниз или снизу вверх. Принимает четыре аргумента и возвращает кортеж из трех элементов, включая путь к каталогу, имена каталогов и имена файлов.
Синтаксис
|
1 |
os.walk(top, topdown=True, onerror=None, followlinks=False) |
Параметры
- top — каждый каталог, корневой каталог которого находится в каталоге, генерирует, например, три кортежа (путь к каталогу, имена каталогов и имена файлов).
- topdown — это необязательный аргумент, в котором, если он имеет значение True или не указано, каталоги сканируются сверху вниз. Если параметр «topdown» применен к значению «False», каталоги считаются восходящими.
- onerror — это необязательный аргумент, показывающий ошибку, позволяющую продолжить обход, или вызвать исключение для прерывания обхода.
- Followlinks — посещает каталоги, на которые указывают символические ссылки, если установлено значение True.
Возвращаемое значение
Возвращает кортеж из трех элементов (каталог, имена каталогов, имена файлов).
Пример 1: как использовать метод Python os.walk
Чтобы пройти по каталогу в Python, вы можете использовать функцию os.walk(). Каждый каталог в дереве, находящемся в верхней части каталога, генерирует кортеж из трех элементов: путь к каталогу, имена каталогов и имена файлов.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import os if __name__ == "__main__": for(root, dirs, files) in os.walk('/Users/krunal/Desktop/code/pyt/database', topdown=True): print("The root is: ") print(root) print("The directories are: ") print(dirs) print("The files are: ") print(files) print('--------------------------------') |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
The root is: /Users/krunal/Desktop/code/pyt/database The directories are: ['.vscode'] The files are: ['shows.csv', 'Netflix.csv', 'marketing.csv', 'new_file.json', 'data.json', 'Netflix', 'shows.db', 'app.py', 'purchase.csv', 'final.zip', 'sales.csv'] -------------------------------- The root is: /Users/krunal/Desktop/code/pyt/database/.vscode The directories are: [] The files are: ['settings.json'] -------------------------------- |
Пример 2: topdown = False
Если вы измените значение topdown на False, вы получите следующий результат.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import os if __name__ == "__main__": for(root, dirs, files) in os.walk('/Users/krunal/Desktop/code/pyt/database', topdown=False): print("The root is: ") print(root) print("The directories are: ") print(dirs) print("The files are: ") print(files) print('--------------------------------') |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
The root is: /Users/krunal/Desktop/code/pyt/database/.vscode The directories are: [] The files are: ['settings.json'] -------------------------------- The root is: /Users/krunal/Desktop/code/pyt/database The directories are: ['.vscode'] The files are: ['shows.csv', 'Netflix.csv', 'marketing.csv', 'new_file.json', 'data.json', 'Netflix', 'shows.db', 'app.py', 'purchase.csv', 'final.zip', 'sales.csv'] |
Как видно из пути, который возвращает путь, список каталогов и список файлов снизу вверх.
По умолчанию ошибки функции listdir() игнорируются.
Пример 3: как распечатать дерево каталогов в Python
Код ниже распечатывает дерево каталогов. Он проходит через каждый каталог и подкаталог, начиная с указанного вами корневого каталога.
|
1 2 3 4 5 6 7 8 9 10 |
import os root_dir = '/Users/krunallathiya/Desktop/Code' for dirpath, dirnames, filenames in os.walk(root_dir): print(f'Found directory: {dirpath}') for file_name in filenames: print(file_name) |
Он распечатает полное дерево каталогов в этой папке.
Пример 4: поиск определенного файла
Приведенный ниже код проходит по дереву каталогов, чтобы найти определенный файл. Как только файл найден, он распечатывает путь к файлу.
|
1 2 3 4 5 6 7 8 9 |
import os root_dir = '/Users/krunallathiya/Desktop/Code' file_to_find = 'file.txt' for dirpath, dirnames, filenames in os.walk(root_dir): if file_to_find in filenames: print(f'Found {file_to_find} in directory {dirpath}') break |
Он найдет конкретный файл, если он существует.
Пример 5: подсчет количества файлов в дереве каталогов
Чтобы подсчитать количество файлов в дереве каталогов в Python, вы можете использовать метод os.walk().
|
1 2 3 4 5 6 7 8 9 10 |
import os root_dir = '/Users/krunallathiya/Desktop/Code' file_count = 0 for dirpath, dirnames, filenames in os.walk(root_dir): file_count += len(filenames) print(f'Total number of files: {file_count}') |
Выход
|
1 |
Total number of files: 41574 |
