glob — Utvidgning av söknamnsmönster i Unix-stil

Källkod: Lib/glob.py


Modulen glob hittar alla sökvägar som matchar ett angivet mönster enligt de regler som används av Unix-skalet, även om resultaten returneras i godtycklig ordning. Ingen tilde-expansion görs, men *, ? och teckenintervall uttryckta med [] kommer att matchas korrekt. Detta görs genom att använda funktionerna os.scandir() och fnmatch.fnmatch() tillsammans, och inte genom att faktiskt anropa ett subshell.

Observera att filer som börjar med en punkt (.) bara kan matchas av mönster som också börjar med en punkt, till skillnad från fnmatch.fnmatch() eller pathlib.Path.glob(). (För tilde och expansion av skalvariabler, använd os.path.expanduser() och os.path.expandvars())

För en bokstavlig matchning omsluter du metatecknen inom parentes. Till exempel matchar '[?]' tecknet '?'.

Modulen glob definierar följande funktioner:

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

Returnerar en eventuellt tom lista med sökvägsnamn som matchar sökvägsnamn, som måste vara en sträng som innehåller en sökvägsspecifikation. pathname kan vara antingen absolut (som /usr/src/Python-1.5/Makefile) eller relativt (som ../../Tools/*/*.gif) och kan innehålla jokertecken i shell-stil. Trasiga symlänkar inkluderas i resultaten (som i skalet). Huruvida resultaten sorteras eller inte beror på filsystemet. Om en fil som uppfyller villkoren tas bort eller läggs till under anropet av denna funktion, är det ospecificerat om ett sökvägsnamn för den filen kommer att inkluderas.

Om root_dir inte är None, bör det vara ett path-like object som anger rotkatalogen för sökning. Det har samma effekt på glob() som att ändra den aktuella katalogen innan den anropas. Om sökvägsnamn är relativt kommer resultatet att innehålla sökvägar som är relativa till root_dir.

Denna funktion kan stödja sökvägar i förhållande till katalogbeskrivare med parametern dir_fd.

Om recursive är sant kommer mönstret ”**” att matcha alla filer och noll eller fler kataloger, underkataloger och symboliska länkar till kataloger. Om mönstret följs av en os.sep eller os.altsep kommer filerna inte att matchas.

Om include_hidden är sant kommer mönstret ”**” att matcha dolda kataloger.

Utlöser en auditing event glob.glob med argumenten pathname, recursive.

Utlöser en auditing-händelse glob.glob/2 med argumenten pathname, recursive, root_dir, dir_fd.

Anteckning

Att använda mönstret ”**” i stora katalogträd kan ta orimligt mycket tid i anspråk.

Anteckning

Denna funktion kan returnera duplicerade sökvägsnamn om sökvägsnamn innehåller flera ”**”-mönster och recursive är true.

Ändrad i version 3.5: Stöd för rekursiva globs med hjälp av ”**”.

Ändrad i version 3.10: Parametrarna root_dir och dir_fd har lagts till.

Ändrad i version 3.11: Parametern include_hidden har lagts till.

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

Returnerar en iterator som ger samma värden som glob() utan att faktiskt lagra dem alla samtidigt.

Utlöser en auditing event glob.glob med argumenten pathname, recursive.

Utlöser en auditing-händelse glob.glob/2 med argumenten pathname, recursive, root_dir, dir_fd.

Anteckning

Denna funktion kan returnera duplicerade sökvägsnamn om sökvägsnamn innehåller flera ”**”-mönster och recursive är true.

Ändrad i version 3.5: Stöd för rekursiva globs med hjälp av ”**”.

Ändrad i version 3.10: Parametrarna root_dir och dir_fd har lagts till.

Ändrad i version 3.11: Parametern include_hidden har lagts till.

glob.escape(pathname)

Escape alla specialtecken ('?', '*' och '['). Detta är användbart om du vill matcha en godtycklig bokstavlig sträng som kan innehålla specialtecken. Specialtecken i drive/UNC sharepoints escapes inte, t.ex. på Windows ger escape('//?/c:/Quo vadis?.txt') '//?/c:/Quo vadis[?].txt'.

Tillagd i version 3.4.

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

Konverterar den angivna sökvägsspecifikationen till ett reguljärt uttryck för användning med re.match(). Sökvägsspecifikationen kan innehålla jokertecken i shell-stil.

Till exempel:

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

Sökvägsseparatorer och segment är meningsfulla för den här funktionen, till skillnad från fnmatch.translate(). Som standard matchar inte jokertecken sökvägsseparatorer och * mönstersegment matchar exakt ett sökvägssegment.

Om recursive är sant kommer mönstersegmentet ”**” att matcha valfritt antal sökvägssegment.

Om include_hidden är sant kan jokertecken matcha sökvägssegment som börjar med en punkt (.).

En sekvens av sökvägsseparatorer kan anges i argumentet seps. Om det inte anges används os.sep och altsep (om tillgängliga).

Se även

pathlib.PurePath.full_match() och pathlib.Path.glob(), som anropar denna funktion för att implementera mönstermatchning och globbing.

Tillagd i version 3.13.

Exempel

Betrakta en katalog som innehåller följande filer: 1.gif, 2.txt, card.gif och en underkatalog sub som bara innehåller filen 3.txt. glob() ger följande resultat. Lägg märke till hur alla ledande komponenter i sökvägen bevaras.

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

Om katalogen innehåller filer som börjar med . kommer de inte att matchas som standard. Tänk till exempel på en katalog som innehåller card.gif och .card.gif:

>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']

Se även

Modulen fnmatch erbjuder filnamnsexpansion (inte sökväg) i shell-stil.

Se även

Modulen pathlib erbjuder sökvägsobjekt på hög nivå.