Допустим, у нас есть многоуровневый каталог, полный файлов, которые мы хотим проанализировать.
main |- A |- 1.txt |- 2.txt |- B |- 3.txt |- C |- 4.txt
Это могут быть изображения, аудиофайлы, файлы CSV или все, что вы хотите проанализировать, но в демонстрационных целях я буду использовать файлы .txt. Здесь основная папка содержит несколько файлов .txt в разных папках.
Функция os.walk
Функция os.walk
по сути просматривает все в папке "main"
- каждый файл, папку, подпапку и файл в каждой подпапке.
import os for root, subfolders, filenames in os.walk("main"): print(root, subfolders, filenames)
Функция os.walk
генерирует 3 переменные - root
, subfolders
и filenames.
.
root
- строковое значение, относящееся к пути к файлу, начиная с папки "main"
subfolders
- это список, содержащий строки, и каждая строка относится к подпапке внутри root
filenames
- это список, содержащий строки, и каждая строка относится к имени файла внутри root
Получение каждого файла .txt внутри main
Чтобы получить путь к каждому файлу внутри папки, мы можем просто объединить root
и filename
вместе.
import os for root, subfolders, filenames in os.walk("main"): for filename in filenames: filepath = root + "/" + filename print(filepath) # do stuff with filepath
Работа с файлами, которые нам не важны
Иногда по какой-то причине у нас могут быть случайные автоматически сгенерированные файлы - __pycache__
, .DS_Store
и все такое прочее. Чтобы наш код не прочитал их случайно, мы можем использовать простой оператор if, чтобы отфильтровать их.
import os for root, subfolders, filenames in os.walk("main"): for filename in filenames: filepath = root + "/" + filename print(filepath) if filename[-4:] != ".txt": continue # do stuff with filepath
Заключение
Если вы еще не знали об этой функции, надеюсь, это облегчит вам жизнь!
Больше контента на plainenglish.io