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 enos.sep
elleros.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 argumentenpathname
,recursive
.Utlöser en auditing-händelse
glob.glob/2
med argumentenpathname
,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 argumentenpathname
,recursive
.Utlöser en auditing-händelse
glob.glob/2
med argumentenpathname
,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 gerescape('//?/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
ochaltsep
(om tillgängliga).Se även
pathlib.PurePath.full_match()
ochpathlib.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å.