Hoe gebruik je de Glob()-functie om bestanden recursief te vinden in Python?
Glob is een algemene term die wordt gebruikt om technieken te definiëren om gespecificeerde patronen te matchen volgens regels die verband houden met Unix-shell. Linux- en Unix-systemen en shells ondersteunen ook glob en bieden ook functionaliteit glob()> in systeembibliotheken.
In Python wordt de glob-module gebruikt om op te halen bestanden/padnamen overeenkomen met een bepaald patroon. De patroonregels van glob volgen de standaard Unix-paduitbreidingsregels. Er wordt ook voorspeld dat het volgens benchmarks sneller is dan andere methoden om padnamen in mappen te matchen. Met glob kunnen we ook jokertekens gebruiken ('*, ?, [ranges])> afgezien van het zoeken naar exacte tekenreeksen om het ophalen van paden eenvoudiger en handiger te maken.
Opmerking: Deze module wordt ingebouwd in Python, dus het is niet nodig om deze extern te installeren.
Voorbeeld:
# Python program to demonstrate> # glob using different wildcards> > > import> glob> > > print> (> 'Named explicitly:'> )> for> name> in> glob.glob(> '/home/geeks/Desktop/gfg/data.txt'> ):> > print> (name)> > # Using '*' pattern> print> (> '
Named with wildcard *:'> )> for> name> in> glob.glob(> '/home/geeks/Desktop/gfg/*'> ):> > print> (name)> > # Using '?' pattern> print> (> '
Named with wildcard ?:'> )> for> name> in> glob.glob(> '/home/geeks/Desktop/gfg/data?.txt'> ):> > print> (name)> > # Using [0-9] pattern> print> (> '
Named with wildcard ranges:'> )> for> name> in> glob.glob(> '/home/geeks/Desktop/gfg/*[0-9].*'> ):> > print> (name)> |
Uitgang:
De functie Glob() gebruiken om bestanden recursief te vinden
We kunnen de functie gebruiken glob.glob()> of glob.iglob()> rechtstreeks vanuit de glob-module om paden recursief op te halen uit de mappen/bestanden en submappen/subbestanden.
Syntaxis:
glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)
Opmerking: Wanneer recursief is ingesteld True> **> gevolgd door een padscheidingsteken ('./**/')> komt overeen met alle bestanden of mappen.
Voorbeeld:
# Python program to find files> # recursively using Python> > > import> glob> > > # Returns a list of names in list files.> print> (> 'Using glob.glob()'> )> files> => glob.glob(> '/home/geeks/Desktop/gfg/**/*.txt'> ,> > recursive> => True> )> for> file> in> files:> > print> (> file> )> > > # It returns an iterator which will> # be printed simultaneously.> print> (> '
Using glob.iglob()'> )> for> filename> in> glob.iglob(> '/home/geeks/Desktop/gfg/**/*.txt'> ,> > recursive> => True> ):> > print> (filename)> |
Uitgang:
Voor oudere versies van Python:
De meest eenvoudige methode is om te gebruiken os.walk() omdat het specifiek is ontworpen en geoptimaliseerd om recursief bladeren door een directorystructuur mogelijk te maken. Of we kunnen het ook gebruiken os.listdir() om alle bestanden in de map en submappen op te halen en er vervolgens uit te filteren.
Laten we het zien aan de hand van een voorbeeld-
Voorbeeld:
# Python program to find files> # recursively using Python> > > import> os> > # Using os.walk()> for> dirpath, dirs, files> in> os.walk(> 'src'> ):> > for> filename> in> files:> > fname> => os.path.join(dirpath,filename)> > if> fname.endswith(> '.c'> ):> > print> (fname)> > '''> Or> We can also use fnmatch.filter()> to filter out results.> '''> for> dirpath, dirs, files> in> os.walk(> 'src'> ):> > for> filename> in> fnmatch.> filter> (files,> '*.c'> ):> > print> (os.path.join(dirpath, filename))> > # Using os.listdir()> path> => 'src'> dir_list> => os.listdir(path)> for> filename> in> fnmatch.> filter> (dir_list,> '*.c'> ):> > print> (os.path.join(dirpath, filename))> |
Uitgang:
./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c ./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c ./src/add.c ./src/subtract.c ./src/sub/mul.c ./src/sub/div.c