glob — Unix style pathname pattern expansion

Вихідний код: Lib/glob.py


The glob module finds pathnames using pattern matching rules similar to the Unix shell. No tilde expansion is done, but *, ?, and character ranges expressed with [] will be correctly matched. This is done by using the os.scandir() and fnmatch.fnmatch() functions in concert, and not by actually invoking a subshell.

Примітка

The pathnames are returned in no particular order. If you need a specific order, sort the results.

Files beginning with a dot (.) can only be matched by patterns that also start with a dot, unlike fnmatch.fnmatch() or pathlib.Path.glob(). For tilde and shell variable expansion, use os.path.expanduser() and os.path.expandvars().

Для буквального збігу заберіть метасимволи в дужки. Наприклад, ''[?]' відповідає символу ''?'.

The glob module defines the following functions:

glob.glob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Return a possibly empty list of path names that match pathname, which must be a string containing a path specification. pathname can be either absolute (like /usr/src/Python-1.5/Makefile) or relative (like ../../Tools/*/*.gif), and can contain shell-style wildcards. Broken symlinks are included in the results (as in the shell). Whether or not the results are sorted depends on the file system. If a file that satisfies conditions is removed or added during the call of this function, whether a path name for that file will be included is unspecified.

If root_dir is not None, it should be a path-like object specifying the root directory for searching. It has the same effect on glob() as changing the current directory before calling it. If pathname is relative, the result will contain paths relative to root_dir.

Ця функція може підтримувати шляхи відносно дескрипторів каталогу з параметром dir_fd.

Якщо recursive має значення true, шаблон «**» відповідатиме будь-яким файлам і нулю або більше каталогів, підкаталогів і символічних посилань на каталоги. Якщо за шаблоном йде os.sep або os.altsep, файли не збігатимуться.

If include_hidden is true, «**» pattern will match hidden directories.

Викликає подію аудиту glob.glob з аргументами pathname, recursive.

Викликає подію аудиту glob.glob/2 з аргументами pathname, recursive, root_dir, dir_fd.

Примітка

Використання шаблону «**» у великих деревах каталогів може зайняти надто багато часу.

Примітка

This function may return duplicate path names if pathname contains multiple «**» patterns and recursive is true.

Змінено в версії 3.5: Підтримка рекурсивних глобусів з використанням «**».

Змінено в версії 3.10: Додано параметри root_dir і dir_fd.

Змінено в версії 3.11: Added the include_hidden parameter.

glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False, include_hidden=False)

Повертає iterator, який дає ті самі значення, що й glob(), фактично не зберігаючи їх усі одночасно.

Викликає подію аудиту glob.glob з аргументами pathname, recursive.

Викликає подію аудиту glob.glob/2 з аргументами pathname, recursive, root_dir, dir_fd.

Примітка

This function may return duplicate path names if pathname contains multiple «**» patterns and recursive is true.

Змінено в версії 3.5: Підтримка рекурсивних глобусів з використанням «**».

Змінено в версії 3.10: Додано параметри root_dir і dir_fd.

Змінено в версії 3.11: Added the include_hidden parameter.

glob.escape(pathname)

Екранування всіх спеціальних символів ('?', '*' і '['). Це корисно, якщо ви хочете зіставити довільний літеральний рядок, який може містити спеціальні символи. Спеціальні символи в точках доступу/UNC не екрануються, напр. у Windows escape('//?/c:/Quo vadis?.txt') повертає '//?/c:/Quo vadis[?].txt''.

Added in version 3.4.

glob.translate(pathname, *, recursive=False, include_hidden=False, seps=None)

Convert the given path specification to a regular expression for use with re.match(). The path specification can contain shell-style wildcards.

Наприклад:

>>> import glob, re
>>>
>>> regex = glob.translate('**/*.txt', recursive=True, include_hidden=True)
>>> regex
'(?s:(?:.+/)?[^/]*\\.txt)\\Z'
>>> reobj = re.compile(regex)
>>> reobj.match('foo/bar/baz.txt')
<re.Match object; span=(0, 15), match='foo/bar/baz.txt'>

Path separators and segments are meaningful to this function, unlike fnmatch.translate(). By default wildcards do not match path separators, and * pattern segments match precisely one path segment.

If recursive is true, the pattern segment «**» will match any number of path segments.

If include_hidden is true, wildcards can match path segments that start with a dot (.).

A sequence of path separators may be supplied to the seps argument. If not given, os.sep and altsep (if available) are used.

Дивись також

pathlib.PurePath.full_match() and pathlib.Path.glob() methods, which call this function to implement pattern matching and globbing.

Added in version 3.13.

Приклади

Consider a directory containing the following files: 1.gif, 2.txt, card.gif and a subdirectory sub which contains only the file 3.txt. glob() will produce the following results. Notice how any leading components of the path are preserved.

>>> 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']

Дивись також

The fnmatch module offers shell-style filename (not path) expansion.

Дивись також

Модуль pathlib пропонує об’єкти шляху високого рівня.