Hvordan bruke Glob()-funksjonen for å finne filer rekursivt i Python?

Hvordan bruke Glob()-funksjonen for å finne filer rekursivt i Python?

Glob er et generelt begrep som brukes for å definere teknikker for å matche spesifiserte mønstre i henhold til regler knyttet til Unix-skall. Linux- og Unix-systemer og skall støtter også glob og gir også funksjon glob()> i systembiblioteker.

I Python brukes glob-modulen til å hente filer/stinavn samsvarer med et spesifisert mønster. Mønsterreglene for glob følger standard Unix-baneutvidelsesregler. Det er også spådd at i henhold til benchmarks er det raskere enn andre metoder å matche stinavn i kataloger. Med glob kan vi også bruke jokertegn ('*, ?, [ranges])> bortsett fra eksakt strengsøk for å gjøre stihenting enklere og praktisk.

Merk: Denne modulen kommer innebygd med Python, så det er ikke nødvendig å installere den eksternt.

Eksempel:




# 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)>

Utgang:

python-glob

Bruke Glob()-funksjonen for å finne filer rekursivt

Vi kan bruke funksjonen glob.glob()> eller glob.iglob()> direkte fra glob-modulen for å hente stier rekursivt fra innsiden av katalogene/filene og underkatalogene/underfilene.

Syntaks:

 glob.glob(pathname, *, recursive=False) 
 glob.iglob(pathname, *, recursive=False) 

Merk: Når rekursiv er satt True> **> etterfulgt av baneskiller ('./**/')> vil matche alle filer eller kataloger.

Eksempel:




# 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)>

Utgang:

python-glob
For eldre versjoner av python:
Den enkleste metoden er å bruke os.walk() siden den er spesielt designet og optimalisert for å tillate rekursiv surfing i et katalogtre. Eller vi kan også bruke os.listdir() for å få alle filene i kataloger og underkataloger og deretter filtrere ut.

La oss se det gjennom et eksempel-
Eksempel:




# 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))>

Utgang:

 ./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