Рекурсивное получение имен файлов по шаблону из дерева каталогов
Описанные ниже методы позволяют произвести рекурсивный обход дерева каталога и получить список файлов средствами модуля pathlib . Данные методы принадлежат экземпляру, созданному из класса Path() .
Так как класс pathlib.Path() наследуется от класса pathlib.PurePath() , следовательно он поддерживает все операции по манипуляции с путями файловой системы.
Содержание:
- Выбрать файлы из каталога в соответствии с шаблоном,
- Рекурсивный отбор файлов из каталога по шаблону,
- Получение итератора содержимого каталога.
Path.glob(pattern, *, case_sensitive=None) :
Метод Path.glob() возвращает список всех файлов любого типа, соответствующий заданному шаблону pattern , расположенных в каталоге, указанном в пути path .
>>> from pathlib import Path >>> paths = sorted(Path('.').glob('*.py')) >>> paths # [PosixPath('pthlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')] # преобразуем в список строк list(map(str, paths)) # ['pthlib.py', 'setup.py', 'test_pathlib.py'] >>> path = sorted(Path('.').glob('*/*.py')) >>> path # [PosixPath('docs/conf.py')] # что бы преобразовать объект PosixPath в строку # просто передайте его в функцию str() >>> str(path) # 'docs/conf.py'
Изменено в Python 3.11: возвращает только каталоги, если шаблон pattern заканчивается разделителем компонентов пути ( os.sep или os.altsep ).
Изменено в версии Python 3.12: Добавлен ключевой аргумент case_sensitivity . По умолчанию или когда аргументу case_sensitive присвоено значение None , этот метод сопоставляет пути, используя правила оформления, зависящие от конкретной платформы: как правило, с учетом регистра в POSIX и без учета регистра в Windows. Чтобы переопределить такое поведение, необходимо установить значение case_sensitive равным True или False .
Шаблоны pattern те же, что и для fnmatch , с добавлением «**» , что означает «этот каталог и все подкаталоги рекурсивно«. Другими словами, шаблон ‘**’ указывает на рекурсивный обход каталога в глубину, указанного в пути path , и всех его подкаталогов:
>>> from pathlib import Path >>> paths = sorted(Path('.').glob('**/*.py')) >>> paths # [PosixPath('build/lib/pathlib.py'), # PosixPath('docs/conf.py'), # PosixPath('pathlib.py'), # PosixPath('setup.py'), # PosixPath('test_pathlib.py')] # преобразуем в список строк >>> list(map(str, paths)) # ['build/lib/pathlib.py', # docs/conf.py, # pathlib.py, # 'setup.py' # 'test_pathlib.py']
Примечание. Использование шаблона ‘**’ в больших деревьях каталогов может занять слишком много времени.
Path.rglob(pattern, *, case_sensitive=None) :
Метод Path.rglob() работает подобно вызову метода Path.glob() с добавлением конструкции ‘**/’ перед заданным относительным шаблоном pattern , тем самым по умолчанию производит рекурсивный поиск файлов, соответствующих pattern :
>>> from pathlib import Path >>> sorted(Path().rglob("*.py")) # [PosixPath('build/lib/pathlib.py'), # PosixPath('docs/conf.py'), # PosixPath('pathlib.py'), # PosixPath('setup.py'), # PosixPath('test_pathlib.py')]
Изменено в версии Python 3.11: возвращает только каталоги, если шаблон pattern заканчивается разделителем компонентов пути ( os.sep или os.altsep ).
Изменено в версии Python 3.12: Добавлен ключевой аргумент case_sensitivity . По умолчанию или когда аргументу case_sensitive присвоено значение None , этот метод сопоставляет пути, используя правила оформления, зависящие от конкретной платформы: как правило, с учетом регистра в POSIX и без учета регистра в Windows. Чтобы переопределить такое поведение, необходимо установить значение case_sensitive равным True или False .
Path.iterdir() :
Метод Path.iterdir() вернет итератор объектов пути содержимого каталога, если путь path указывает на каталог:
>>> from pathlib import Path >>> p = Path('docs') >>> for child in p.iterdir(): str(child) . # 'docs/conf.py' # 'docs/_templates' # 'docs/make.bat' # 'docs/index.rst' # 'docs/_build' # 'docs/_static' # 'docs/Makefile'
Смотрите другие методы и свойства, доступные экземпляру класса Path() модуля pathlib .
- os.listdir() — список файлов в директории/каталоге,
- os.scandir() — информация о всех файлах в каталоге/директории,
- glob.glob() — рекурсивный поиск файлов по шаблону,
- os.walk() — рекурсивный обход каталога как в глубину, так и из глубины.
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Класс pathlib.PurePath() и его подклассы
- Класс pathlib.Path() и его подклассы
- Манипуляции с путями файловой системы средствами pathlib
- Проверить наличие файла/каталога/ссылки и т.д. средствами pathlib
- Открытие файла, чтение и запись информации средствами pathlib
- Определение положения в файловой системе средствами pathlib
- Список файлов в папке/каталоге по шаблону средствами pathlib
- Создание/удаление файла/каталога или ссылки средствами pathlib
- Получение информации о файле/каталоге средствами pathlib
- Изменение режима доступа к файлу или каталогу средствами pathlib
- Переименование/замена файла или каталога средствами pathlib
- Преобразование объекта пути pathlib в строку
- Метод walk() модуля pathlib, рекурсивный обход каталога
- Сравнение pathlib с модулями os и os.path
python список файлов в папке
на выходе получаем ответ в виде списка языка python, для дальнейшей обработки вместо вывода на экран необходимо присвоить значение какой-либо переменной. Если в директории есть папки, то мы в этом списке получим и их. Если нужны только файлы их нужно отфильтровать, решения ниже
Пример 2 — список всех текстов файлов в текущей папке
# -*- coding: UTF-8 -*- from os import listdir files = listdir(".") mytxt = filter(lambda x: x.endswith('.txt'), files) print mytxt
В данном случае использовали относительный путь в виде одной точки указывающий на текущую директорию для скрипта. Пример 3. Использования функции isfile для отображения только файлов.
# -*- coding: UTF-8 -*- from os import listdir from os.path import isfile from os.path import join as joinpath mypath = "content" for i in listdir(mypath): if isfile(joinpath(mypath,i)): print i
Если работаем в windows не забываем, что может потребоваться декодирование кириллических имен и путей с помощью функции .decode(‘cp1251’) или .encode(‘cp1251’)
Как получить список файлов и папок в директории
Всем привет! Как в python 3.x получить список файлов, папок и т.д. в директории? Например:
D:\Games\Counter-Strike 1.6\
['hl.exe', 'Counter-Strike.bat', 'unis000.exe', 'cstrike\delta.lst', 'cstrike\cstrike.ico', 'config\serverbrowser.vdf', 'data\info\readme.txt', . ]
P.S. мне главное чтобы были не только файлы в D:\Games\Counter-Strike 1.6\ (‘hl.exe’, ‘Counter-Strike.bat’, ‘unis000.exe’), а так же файлы в папках этой директории и т.д. (‘cstrike\delta.lst’, ‘cstrike\cstrike.ico’, ‘config\serverbrowser.vdf’, ‘data\info\readme.txt’).
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как получить список папок в одной директории ?
IDLE (Python 3.10 64-bit) Windows 10 ————————— Нужны только названия папок, которые построчно.
Как получить список файлов и папок в директории
Как получить список файлов и папок в директории (именно в директории, без файлов подпапок)?

Получить список файлов и папок в директории
Вот такой вопрос возник, допустим я хочу написать что то типа файлового менеджера, как мне получить.

Как получить список папок в заданной директории
Подскажите как получить список папок в заданной директории (при этом имена файлов в список попадать.
2421 / 1463 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
1 2 3 4 5 6
import os for root, dirs, files in os.walk(r'D:\Games\Counter-Strike 1.6\'): print(f'{root}') print(f'\t{dirs}') print(f'\t\t{files}')
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как получить имена всех файлов и папок в некоторой директории?
Нужно срочно, я свое гуи пишу на GraphABC. Работает без лагов. Так вот имена всех файлов и папок.
Как получить список директорий и список файлов в директории?
Очень нужно организовать поиск на диске. Как искать в нутри файла я знаю, а вот как искать вовсех.

Список файлов и папок в заданной директории
Всем здравствуйте. Скажите как получить дерево файлов и папок в заданной дериктории? И все это в.
Выводить список файлов, папок из директории
Здравствуйте, как выводить список папок в виде select. Например у меня есть папка и внутри.
Получить список скрытых папок в директории
Нужно получить имена папок или путь к ним профилей Firefox, которые располагаются по адресу: .

Список всех файлов и папок в директории с подпапками
Привет 🙂 Допустим есть директория по пути: "C:\MyDir" В этой директории есть папки и файлы, в.
Как получить список файлов в папке python
Сразу прошу прощение за форматирования кода. @TODO : прикрутить модуль ! Допустим у нас на сервере есть каталог с файлами:
/var/www/mysite/files
photoes.zip
1.jpg
2.jpg
3.jpg
im.gif
document.pdf
Чтобы получить содержимое этого каталога в виде списка, можно воспользоваться встроенным модулем os:
#Подключаем модуль
import os
#Каталог из которого будем брать файлы
directory = ‘/var/www/mysite/files’
#Получаем список файлов в переменную files
files = os.listdir(directory)
В результате files будет равна:
[‘photoes.zip’, ‘1.jpg’, ‘2.jpg’, ‘3.jpg’, ‘im.gif’, ‘document.pdf’]
Если нужно получить файлы только определенного типа, их можно отфильтровать по расширению:
#Подключаем модуль
import os
#Каталог из которого будем брать изображения
directory = ‘/var/www/mysite/files’
#Получаем список файлов в переменную files
files = os.listdir(directory)
#Фильтруем список
images = filter(lambda x: x.endswith(‘.jpg’), files)
Теперь в переменной images такой список:
решение взято с сайта: http://tutorialbox.freelancing.lv/tutorials/6
Немного магии от модуля os
os.walk() — возвращает объект-генератор. Из полученного объекта можно получить кортежи
для каждого каталога в переданной walk файловой иерархии. Каждый кортеж состоит из трех
элементов:
1. Абсолютный адрес очередного каталога (строка).
2. Имена (без адреса) подкаталогов первого уровня для текущего каталога (список).
3. Имена (без адреса) файлов данного каталога.
Посмотрим, как это работает. Допустим, у нас есть такое дерево каталогов:
tree = os.walk(‘/home/pl/mydir’)
На что же ссылается tree? Попробуем просто получить данные, связанные с данной переменной.
В результате видим
Итак, есть объект-генератор. Поскольку полученный объект генерирует кортежи, количество
которых равно количеству каталогов в дереве, то можно их получить с помощью цикла for и,
например, вывести на экран
for d in tree:
print (d)
В соответствии с вышеуказанным деревом каталогов получится следующее:
(‘/home/pl/mydir’, [‘dir2a’, ‘dir2b’], [‘mash187.pas’, ‘mash189.pas’, ‘menu_.php’, ‘xorg.conf’, ‘клав_тренажер.odt’, ‘Расписание 2004.xls’])
(‘/home/pl/mydir\\dir2a’, [‘dir3’], [‘less1.doc’, ‘Patro_Nia.ogg’, ‘Расписание 2004.doc’])
(‘/home/pl/mydir\\dir2a\\dir3’, [], [‘bottom_.php’, ‘equador.mid’, ‘less1.html’, ‘net_Alt.txt’, ‘poly995.mid’, ‘top_.php’])
(‘/home/pl/mydir\\dir2b’, [], [‘clear.gif’, ‘fon1.jpg’, ‘logo4.png’, ‘okulov245.pas’, ‘okulov273.pas’, ‘plan1.jpg’, ‘plan2.jpg’])
Итак, налицо четыре кортежа (у нас четыре каталога – см. схему выше). Каждый кортеж
включает три элемента. Первый – это адрес каталога, второй – список поддиректорий не глубже
первого уровня, третий – список имен файлов. Если вложенных каталогов или файлов нет, то
соответствующий им список будет пуст.
Если мы еще раз запустим цикл с переменной tree, то уже ничего не получим. Дело в том,
что объект-генератор, с которым переменная была связана, уже был использован, он выдал
свое содержимое и больше его не содержит. Поэтому, если требуется сохранить кортежи для
последующий обработки, то лучше сохранить их, например, в списке:
>>> import os
>>> pdir = ‘G:/projects/pythoner.info/pypath/mydir’
>>> contdir = []
>>> for i in os.walk(pdir):
contdir.append(i)
>>> for i in contdir:
print (i)
(‘G:/projects/pythoner.info/pypath/mydir’, [‘dir2a’, ‘dir2b’], [‘mash187.pas’, ‘mash189.pas’, ‘menu_.php’, ‘sg30.thm’, ‘xorg.conf’, ‘клав_тренажер.odt’, ‘Расписание 2004.xls’])
(‘G:/projects/pythoner.info/pypath/mydir\\dir2a’, [‘dir3’], [‘less1.doc’, ‘Patro_Nia.ogg’, ‘Thumbs.db’, ‘Расписание 2004.doc’])
(‘G:/projects/pythoner.info/pypath/mydir\\dir2a\\dir3’, [], [‘equador.mid’, ‘fon1.jpg’, ‘logo4.png’, ‘logos.bmp’, ‘net_Alt.txt’, ‘plan1.jpg’, ‘poly995.mid’, ‘Thumbs.db’, ‘top_.php’])
(‘G:/projects/pythoner.info/pypath/mydir\\dir2b’, [], [‘bottom_.php’, ‘clear.gif’, ‘less1.html’, ‘okulov245.pas’, ‘okulov273.pas’, ‘plan2.jpg’, ‘sg30.sdv’])
С помощью функции walk() можно получить имена файлов с тем, чтобы в дальнейшем с ними
что-нибудь делать с помощью других методов Python и его модулей. Получить их можно,
извлекая из третьего элемента каждого кортежа. Сделать это можно так, как показано ниже:
for d, dirs, files in os.walk(‘c:/mydir’):
for f in files:
print (f)
Переменная d в каждой итерации связывается с первым элементом каждого кортежа (строкой,
содержащей адрес каталога), dirs – со вторым элементом (списком подкаталогов), а files —
со списками файлов очередного каталога. Чтобы извлечь списки файлов целиком, а не
выделять каждый файл по отдельности, можно сделать так:
for d, dirs, files in os.walk(‘c:/mydir’):
print (files)
[‘mash187.pas’, ‘mash189.pas’, ‘menu_.php’, ‘xorg.conf’, ‘клав_тренажер.odt’, ‘Расписание 2004.xls’]
[‘less1.doc’, ‘Patro_Nia.ogg’, ‘Расписание 2004.doc’]
[‘bottom_.php’, ‘equador.mid’, ‘less1.html’, ‘net_Alt.txt’, ‘poly995.mid’, ‘top_.php’]
[‘clear.gif’, ‘fon1.jpg’, ‘logo4.png’, ‘okulov245.pas’, ‘okulov273.pas’, ‘plan1.jpg’, ‘plan2.jpg’]
Имена файлов не полные. Они не содержат адреса, следовательно, для операций с файлами
таких списков не достаточно. Для получения полных адресов подойдет функция
os.path.join(). С ее помощью можно объединить первый элемент кортежа, содержащий полный
путь, с именем каждого файла:
>>> path_f = []
>>> for d, dirs, files in os.walk(‘c:/mydir’):
for f in files:
path = os.path.join(d,f) # формирование адреса
path_f.append(path) # добавление адреса в список
>>> path_f
[‘c:/mydir\\mash187.pas’, ‘c:/mydir\\mash189.pas’, ‘c:/mydir\\menu_.php’, ‘c:/mydir\\xorg.conf’, ‘c:/mydir\\клав_тренажер.odt’, ‘c:/mydir\\Расписание 2004.xls’, ‘c:/mydir\\dir2a\\less1.doc’, ‘c:/mydir\\dir2a\\Patro_Nia.ogg’, ‘c:/mydir\\dir2a\\Расписание 2004.doc’, ‘c:/mydir\\dir2a\\dir3\\bottom_.php’, ‘c:/mydir\\dir2a\\dir3\\equador.mid’, ‘c:/mydir\\dir2a\\dir3\\less1.html’, ‘c:/mydir\\dir2a\\dir3\\net_Alt.txt’, ‘c:/mydir\\dir2a\\dir3\\poly995.mid’, ‘c:/mydir\\dir2a\\dir3\\top_.php’, ‘c:/mydir\\dir2b\\clear.gif’, ‘c:/mydir\\dir2b\\fon1.jpg’, ‘c:/mydir\\dir2b\\logo4.png’, ‘c:/mydir\\dir2b\\okulov245.pas’, ‘c:/mydir\\dir2b\\okulov273.pas’, ‘c:/mydir\\dir2b\\plan1.jpg’, ‘c:/mydir\\dir2b\\plan2.jpg’]
Пример имеет, скорее всего, демонстрирующее, а не практическое значение, т.к.
результирующий список содержит повторяющиеся части строк. Поэтому лучше напрямую работать с
кортежем, извлеченным из объекта-генератора.
