В Python есть модуль ОС, предоставляющий функции для работы с файлами. Мы можем перечислить файлы в каталоге и подкаталоге программно в Python, используя модуль ОС. В этой статье мы обсудим различные методы создания списка всех файлов в дереве каталогов и подкаталогах..
Как распечатать список файлов Python
Давайте напечатаем все файлы, перечисленные в нашем текущем рабочем каталоге. Во-первых, вам нужно импортировать модуль os в свой файл, а затем использовать функцию os.listdir().
Напишите следующий код в файле app.py.
|
1 2 3 4 5 |
# app.py import os print(os.listdir(path='.')) |
Выход:
|
1 2 3 4 5 6 7 |
python3 app.py ['index.html', 'demo.txt', '.DS_Store', 'person.txt', 'app.json', 'DataScience.ipynb', 'ads.txt', 'example.http', 'student.csv', 'app.txt', '__pycache__', 'data.csv', 'app.component.ts', 'data.json', 'help_examples.py', 'MergeSort.java', 'app.sql', 'NumPy.ipynb', 'TensorFlow.ipynb', 'data.csv.numbers', 'app.py', 'info.log', '.ipynb_checkpoints', 'SciKit Learn.ipynb', '.vscode', 'app.rs', 'mod.py', 'output.txt', 'data.txt', 'sample.txt', 'app.cpp'] |
Список файлов в каталоге и подкаталогах с os.listdir()
Нам нужно рекурсивно вызвать функцию os.listdir() для подкаталогов, чтобы создать полный список файлов в заданном дереве каталогов.
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# app.py import os def getFiles(dirName): listOfFile = os.listdir(dirName) completeFileList = list() for file in listOfFile: completePath = os.path.join(dirName, file) if os.path.isdir(completePath): completeFileList = completeFileList + getFiles(completePath) else: completeFileList.append(completePath) return completeFileList dirName = '/Users/krunal/desktop/code/pyt' listOfFiles = getFiles(dirName) print(listOfFiles) |
Вывод:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
python3 app.py ['/Users/krunal/desktop/code/pyt/index.html', '/Users/krunal/desktop/code/pyt/demo.txt', '/Users/krunal/desktop/code/pyt/.DS_Store', '/Users/krunal/desktop/code/pyt/person.txt', '/Users/krunal/desktop/code/pyt/app.json', '/Users/krunal/desktop/code/pyt/DataScience.ipynb', '/Users/krunal/desktop/code/pyt/ads.txt', '/Users/krunal/desktop/code/pyt/example.http', '/Users/krunal/desktop/code/pyt/student.csv', '/Users/krunal/desktop/code/pyt/app.txt', '/Users/krunal/desktop/code/pyt/__pycache__/help_examples.cpython-36.pyc', '/Users/krunal/desktop/code/pyt/__pycache__/mod.cpython-36.pyc', '/Users/krunal/desktop/code/pyt/data.csv', '/Users/krunal/desktop/code/pyt/app.component.ts', '/Users/krunal/desktop/code/pyt/data.json', '/Users/krunal/desktop/code/pyt/help_examples.py', '/Users/krunal/desktop/code/pyt/MergeSort.java', '/Users/krunal/desktop/code/pyt/app.sql', '/Users/krunal/desktop/code/pyt/NumPy.ipynb', '/Users/krunal/desktop/code/pyt/TensorFlow.ipynb', '/Users/krunal/desktop/code/pyt/data.csv.numbers', '/Users/krunal/desktop/code/pyt/app.py', '/Users/krunal/desktop/code/pyt/info.log', '/Users/krunal/desktop/code/pyt/.ipynb_checkpoints/NumPy-checkpoint.ipynb', '/Users/krunal/desktop/code/pyt/.ipynb_checkpoints/SciKit Learn-checkpoint.ipynb', '/Users/krunal/desktop/code/pyt/.ipynb_checkpoints/DataScience-checkpoint.ipynb', '/Users/krunal/desktop/code/pyt/.ipynb_checkpoints/TensorFlow-checkpoint.ipynb', '/Users/krunal/desktop/code/pyt/SciKit Learn.ipynb', '/Users/krunal/desktop/code/pyt/.vscode/settings.json', '/Users/krunal/desktop/code/pyt/app.rs', '/Users/krunal/desktop/code/pyt/mod.py', '/Users/krunal/desktop/code/pyt/output.txt', '/Users/krunal/desktop/code/pyt/data.txt', '/Users/krunal/desktop/code/pyt/sample.txt', '/Users/krunal/desktop/code/pyt/app.cpp'] |
В приведенном выше коде мы определили функцию с именем getFiles(), которая принимает один аргумент с именем dirname. Затем мы создаем список и добавляем полный путь к файлам.
Итак, он начнет перебирать один за другим файл и добавит его полный путь в список, и, в конце концов, мы получим наш полный список файлов.
Получение списка файлов в каталоге и подкаталогах с помощью os.walk()
Модуль python os предоставляет функцию walk() для перебора дерева каталогов.
|
1 |
os.walk(path) |
Функция os.walk() перебирает дерево каталогов при указании пути и для каждого каталога или подкаталога возвращает кортеж, содержащий(, , ).
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 11 |
# app.py import os dirName = '/Users/krunal/desktop/code/pyt' listOfFiles = list() for(dirpath, dirnames, filenames) in os.walk(dirName): listOfFiles += [os.path.join(dirpath, file) for file in filenames] for elem in listOfFiles: print(elem) |
Вывод:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
python3 app.py /Users/krunal/desktop/code/pyt/index.html /Users/krunal/desktop/code/pyt/demo.txt /Users/krunal/desktop/code/pyt/.DS_Store /Users/krunal/desktop/code/pyt/person.txt /Users/krunal/desktop/code/pyt/app.json /Users/krunal/desktop/code/pyt/DataScience.ipynb /Users/krunal/desktop/code/pyt/ads.txt /Users/krunal/desktop/code/pyt/example.http /Users/krunal/desktop/code/pyt/student.csv /Users/krunal/desktop/code/pyt/app.txt /Users/krunal/desktop/code/pyt/data.csv /Users/krunal/desktop/code/pyt/app.component.ts /Users/krunal/desktop/code/pyt/data.json /Users/krunal/desktop/code/pyt/help_examples.py /Users/krunal/desktop/code/pyt/MergeSort.java /Users/krunal/desktop/code/pyt/app.sql /Users/krunal/desktop/code/pyt/NumPy.ipynb /Users/krunal/desktop/code/pyt/TensorFlow.ipynb /Users/krunal/desktop/code/pyt/data.csv.numbers /Users/krunal/desktop/code/pyt/app.py /Users/krunal/desktop/code/pyt/info.log /Users/krunal/desktop/code/pyt/SciKit Learn.ipynb /Users/krunal/desktop/code/pyt/app.rs /Users/krunal/desktop/code/pyt/mod.py /Users/krunal/desktop/code/pyt/output.txt /Users/krunal/desktop/code/pyt/data.txt /Users/krunal/desktop/code/pyt/sample.txt /Users/krunal/desktop/code/pyt/app.cpp /Users/krunal/desktop/code/pyt/__pycache__/help_examples.cpython-36.pyc /Users/krunal/desktop/code/pyt/__pycache__/mod.cpython-36.pyc /Users/krunal/desktop/code/pyt/.ipynb_checkpoints/NumPy-checkpoint.ipynb /Users/krunal/desktop/code/pyt/.ipynb_checkpoints/SciKit Learn-checkpoint.ipynb /Users/krunal/desktop/code/pyt/.ipynb_checkpoints/DataScience-checkpoint.ipynb /Users/krunal/desktop/code/pyt/.ipynb_checkpoints/TensorFlow-checkpoint.ipynb /Users/krunal/desktop/code/pyt/.vscode/settings.json |
Перечисление всех файлов txt в указанном каталоге с Glob в Python
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 |
# app.py import glob dirName = '/Users/krunal/desktop/code/pyt' files = [f for f in glob.glob(dirName + "**/*.txt", recursive=True)] for f in files: print(f) |
Вывод:
|
1 2 3 4 5 6 7 8 |
python3 app.py /Users/krunal/desktop/code/pyt/demo.txt /Users/krunal/desktop/code/pyt/person.txt /Users/krunal/desktop/code/pyt/ads.txt /Users/krunal/desktop/code/pyt/app.txt /Users/krunal/desktop/code/pyt/output.txt /Users/krunal/desktop/code/pyt/data.txt /Users/krunal/desktop/code/pyt/sample.txt |
В приведенном выше примере мы использовали понимание списка, чтобы получить список всех файлов с расширением .txt.
Итак, в этом примере мы выводим только текстовые файлы, а не все файлы.
Список всех каталогов в указанном каталоге + подкаталоги(**)
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 |
# app.py import glob dirName = '/Users/krunal/desktop/code/pyt' folders = [f for f in glob.glob(dirName + "**/", recursive=True)] for f in folders: print(f) |
Выход:
|
1 2 3 |
python3 app.py /Users/krunal/desktop/code/pythonenv/ /Users/krunal/desktop/code/pyt/ |
Заключение

Чтобы вывести каталоги, подкаталоги и файлы, Python имеет отличную встроенную поддержку, которая делает всю работу за вас. Управление файлами и работа с ними — повседневная работа любого программиста.
В этой статье мы увидели, как перечислить все каталоги, подкаталоги и файлы, используя методы Python os.walk(), blob.blob() и Python os.listdir(). Наконец, Python перечисляет все файлы в каталоге, и пример с подкаталогами заканчивается.
