import csv file_list = glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False) file_iter = iglob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False)
pathname
- путь к каталогу файловой системы,root_dir=None
- путь, действует так же, как изменение текущего каталога. Если задан, то pathname
должен быть указан относительно root_dir
.dir_fd=None
- путь относительно дескриптора каталога.recursive=False
- просмотр файлов в подкаталогах.Функция glob()
модуля glob
возвращает список имен путей, которые находятся в каталоге pathname
, который должен быть строкой, содержащей спецификацию пути (подстановочные wildcard-выражения).
Функция iglob()
возвращает итератор, который выдает те же значения, что и функция glob()
, только не сохраняет все пути в оперативной памяти одновременно.
Имя пути pathname
может быть абсолютным, например /usr/src/Python-1.5/Makefile
или относительным, например ../../Tools/*/*.gif
и может содержать символы подстановки в стиле оболочки Unix:
*
- любые символы;?
- любой единичный символ;[seq]
- соответствует любому символу в последовательности seq
. Например [1-6]
- соответствует 1,2,3,4,5,6;[!seq]
- соответствует любому символу, не входящему в последовательность seq
.Битые символические ссылки включаются в итоговый результат. Сортировка результатов зависит от файловой системы.
Если задан аргумент root_dir
(доступно с версии python 3.10), то это должен быть объект, похожий на путь, указывающий корневой каталог для поиска. На функцию glob()
он действует так же, как изменение текущего каталога перед его вызовом. Если pathname
является относительным, то результат будет содержать пути относительно root_dir
.
Эта функция может поддерживать пути относительно дескрипторов каталогов с параметром dir_fd
(доступно с версии python 3.10).
Если для аргумента recursive
задано значение True
, то шаблон **
будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим ссылкам на каталоги. Если за шаблоном следует os.sep
или os.altsep
, файлы не будут совпадать.
Вызывает событие аудита glob.glob
с аргументами pathname
, recursive
.
Примечание.
Использование шаблона **
в больших деревьях каталогов может занять слишком много времени.
Изменено в Python 3.10: Добавлены аргументы root_dir
и dir_fd
.
Дополнительно смотрите:
os.listdir()
- список файлов в директории/каталоге,os.scandir()
- информация о всех файлах в каталоге/директории,os.walk()
- рекурсивный обход каталога как в глубину, так и из глубины,pathlib.Path.glob()
- отбор файлов из каталога/директории по шаблону.glob.glob()
.glob.glob()
,**
,Звездочка '*'
соответствует нулю или более символов в сегменте имени. Например dir/*
.
>>> import glob >>> for py in glob.glob("dir/*"): ... print(py) ... # dir # dir/file.txt # dir/file1.txt # dir/file2.txt # dir/filea.txt # dir/fileb.txt # dir/file?.txt # dir/file*.txt # dir/subdir >>> glob.glob('dir/subdir/*') # ['dir/subdir/file3.txt', 'dir/subdir/file4.txt'] >>> sorted(glob.glob('dir/*/*') # ['dir/subdir/file3.txt', 'dir/subdir/file4.txt']
Знак вопроса '?'
- это один символ подстановки. Что соответствует любому отдельному символу в этой позиции в имени. В примере ниже шаблон 'dir/file?.txt'
соответствует всем именам файлов, которые начинаются с file
, имеют еще один символ любого типа, а затем заканчиваются на .txt
.
import glob for name in sorted(glob.glob('dir/file?.txt')): print(name) # dir/file1.txt # dir/file2.txt # dir/filea.txt # dir/fileb.txt # dir/file?.txt # dir/file*.txt
Используйте диапазон символов [a-z]
вместо знака вопроса, чтобы соответствовать одному из нескольких символов. Этот пример находит все файлы с цифрой в имени перед расширением.
import glob for name in sorted(glob.glob('dir/*[0-9].*')): print(name) # dir/file1.txt # dir/file2.txt
**
.Двойной символ звездочки **
в сочетании с аргументом recursive=True
разрешает поиск файлов по шаблону во всех подкаталогах указанного пути файловой системы.
import glob for name in sorted(glob.glob('dir/**/*[0-9].txt', recursive=True)): print(name) # dir/file1.txt # dir/file2.txt # dir/subdir/file3.txt # dir/subdir/file4.txt
Алгоритм нужного поведения функции glob.glob()
будет следующий:
glob.glob()
как показано выше.list.sort(key=None)
.key
указываем функцию извлечения даты файла os.path.getmtime()
.>>> import glob >>> import os # ищем файлы как показано выше >>> files = glob.glob("*cycle*.log") # далее полученный список файлов сортируем # используя в качестве ключа функцию # получения даты файла os.path.getmtime() >>> files.sort(key=os.path.getmtime) # Используем отсортированный по дате # список файлов по назначению >>> print("\n".join(files))