glob - сопоставление имени файла с шаблоном

Опубликовано: 1 Декабря, 2021

Модуль Glob выполняет поиск по всем именам пути в поисках файлов, соответствующих указанному шаблону, в соответствии с правилами, продиктованными оболочкой Unix. Полученные таким образом результаты возвращаются в произвольном порядке. Некоторые требования требуют обхода списка файлов в определенном месте, в основном имеющего определенный шаблон. Модуль Python glob имеет несколько функций, которые могут помочь в перечислении файлов, соответствующих заданному шаблону, в указанной папке.

Сопоставление с образцом выполняется с помощью функций os.scandir () и fnmatch.fnmatch () , а не путем фактического вызова вспомогательной оболочки. в отличие fnmatch.fnmatch (), glob рассматривает имена файлов, начинающиеся с точки (.), как особые случаи. Для расширения переменных тильды и оболочки используются функции os.path.expanduser () и os.path.expandvars () .

Правила паттернов

  • Следуйте стандартным правилам расширения пути Unix.
  • Поддерживаются специальные символы: два разных символа подстановки - *,? и диапазоны символов, выраженные в [].
  • Правила шаблона применяются к сегментам имени файла (остановка на разделителе пути /).
  • Пути в шаблоне могут быть относительными или абсолютными.

Заявление

  • Это полезно в любой ситуации, когда вашей программе нужно искать в файловой системе список файлов с именами, соответствующими шаблону.
  • Если вам нужен список имен файлов с определенным расширением, префиксом или любой общей строкой в середине, используйте glob вместо написания кода для самостоятельного сканирования содержимого каталога.

Функции в Glob:

  • glob (pathname, *, recursive = False) - возвращает список имен путей, которые соответствуют заданному имени пути, который должен быть строкой, содержащей спецификацию пути. Список тоже может быть пустым.
  • iglob (pathname, *, recursive = False) - этот метод создает объект-генератор Python, который используется для вывода списка файлов в заданном каталоге. Также возвращает итератор, который возвращает те же значения, что и glob (), без фактического сохранения их всех одновременно.
  • escape (путь) - позволяет избежать заданной последовательности символов. Вы можете найти его удобным для поиска файлов с определенными символами в именах файлов и сопоставления произвольной буквальной строки, которая может содержать специальные символы.

Ниже приводится реализация, которая поможет вам понять, как этот модуль можно применить на практике:

Пример 1:

Python3

import glob
# search .py files
# in the current working directory
for py in glob.glob( "*.py" ):
print (py)

Выход :

Пример 2: Программа для отображения подстановочных знаков и диапазонов

Если рекурсивно истинно, шаблон «**» будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим ссылкам на каталоги. Использование шаблона «**» в больших деревьях каталогов может занять чрезмерно много времени.

Python3

import glob
# Using character ranges []
print ( 'Finding file using character ranges [] :- ' )
print (glob.glob( './[0-9].*' ))
# Using wildcard character *
print ( ' Finding file using wildcard character * :- ' )
print (glob.glob( '*.gif' ))
# Using wildcard character ?
print ( ' Finding file using wildcard character ? :- ' )
print (glob.glob( '?.gif' ))
# Using recursive attribute
print ( ' Finding files using recursive attribute :- ' )
print (glob.glob( '**/*.txt' , recursive = True ))

Выход :

Пример 3:

Python3

import glob
  
gen = glob.iglob("*.py")
# returns class type of gen
type(gen)
  
for py in gen:
    print(py)

Выход :

Пример 4:

Python3

import glob
char_seq = "-_#"
for spcl_char in char_seq:
esc_set = "*" + glob.escape(spcl_char) + "*" + ".py"
for py in (glob.glob(esc_set)):
print (py)

Выход :

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.