Модуль glob
находит все пути, соответствующие указанному шаблону, в соответствии с правилами, используемыми оболочкой Unix. Результаты возвращаются в произвольном порядке.
Расширение переменных пути при указании тильды ~/path
не выполняется, но символы '*'
,'?'
и диапазоны символов, такие как [a-z0-9]
, будут работать правильно. Это делается с помощью согласованных функций os.scandir()
и fnmatch.fnmatch()
, а не путем фактического вызова оболочки.
Обратите внимание, что в отличие от fnmatch.fnmatch()
, модуль glob
рассматривает имена файлов, начинающиеся с точки '.'
, как особые случаи.
~
используйте функцию os.path.expanduser()
и os.path.expandvars()
.[?]
Соответствует символу ?
.Смотрите также модуль pathlib
, который предлагает высокоуровневые объекты пути.
Рассмотрим каталог, содержащий следующие файлы: 1.gif
, 2.txt
, card.gif
и вложенный каталог sub
, который содержит только файл 3.txt
. Функция glob.glob() даст следующие результаты. Обратите внимание, как сохраняются любые ведущие компоненты пути.
>>> import glob >>> glob.glob('./[0-9].*') # ['./1.gif', './2.txt'] >>> glob.glob('*.gif') # ['1.gif', 'card.gif'] >>> glob.glob('?.gif') # ['1.gif'] >>> glob.glob('**/*.txt', recursive=True) # ['2.txt', 'sub/3.txt'] >>> glob.glob('./**/', recursive=True) # ['./', './sub/']
Если каталог содержит файлы, начинающиеся с точки '.'
, то они не будут сопоставлены по умолчанию. Например, рассмотрим каталог, содержащий card.gif
и .card.gif
:
>>> import glob >>> glob.glob('*.gif') # ['card.gif'] >>> glob.glob('.c*') # ['.card.gif']