logo

Come utilizzare la funzione Glob() per trovare file ricorsivamente in Python?

Glob è un termine generale utilizzato per definire tecniche per abbinare modelli specificati secondo le regole relative alla shell Unix. Anche i sistemi e le shell Linux e Unix supportano glob e forniscono anche funzioniglob()>nelle librerie di sistema.

In Python, il modulo glob viene utilizzato per recuperare file/percorsi corrispondente a un modello specificato. Le regole del modello di glob seguono le regole di espansione del percorso Unix standard. Si prevede inoltre che, secondo i benchmark, sia più veloce rispetto ad altri metodi far corrispondere i nomi dei percorsi nelle directory. Con glob possiamo anche usare i caratteri jolly('*, ?, [ranges])>oltre alla ricerca esatta delle stringhe per rendere il recupero del percorso più semplice e conveniente.



Nota: Questo modulo è integrato in Python, quindi non è necessario installarlo esternamente.

Esempio:








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

>

>

Produzione :

python-glob

Utilizzo della funzione Glob() per trovare i file in modo ricorsivo

Possiamo usare la funzioneglob.glob()>Oglob.iglob()>direttamente dal modulo glob per recuperare percorsi ricorsivamente dall'interno di directory/file e sottodirectory/sottofile.

Sintassi:

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

Nota: Quando è impostato ricorsivoTrue> **>seguito dal separatore di percorso('./**/')>corrisponderà a qualsiasi file o directory.

Esempio:




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

>

>

Produzione :

python-glob
Per le versioni precedenti di Python:
Il metodo più semplice è usare os.walk() poiché è specificamente progettato e ottimizzato per consentire la navigazione ricorsiva di un albero di directory. Oppure possiamo anche usare os.listdir() per ottenere tutti i file nella directory e nelle sottodirectory e quindi filtrarli.

miglior sorriso del mondo

Vediamolo attraverso un esempio-
Esempio:




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

>

>

Produzione :

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