How to use Glob() function to find files recursively in Python?
Last Updated :
25 Apr, 2020
Glob is a general term used to define techniques to match specified patterns according to rules related to Unix shell. Linux and Unix systems and shells also support glob and also provide function glob()
in system libraries.
In Python, the glob module is used to retrieve files/pathnames matching a specified pattern. The pattern rules of glob follow standard Unix path expansion rules. It is also predicted that according to benchmarks it is faster than other methods to match pathnames in directories. With glob, we can also use wildcards ("*, ?, [ranges])
apart from exact string search to make path retrieval more simple and convenient.
Note: This module comes built-in with Python, so there is no need to install it externally.
Example:
import glob
print ( 'Named explicitly:' )
for name in glob.glob( '/home/geeks/Desktop/gfg/data.txt' ):
print (name)
print ( '\nNamed with wildcard *:' )
for name in glob.glob( '/home/geeks/Desktop/gfg/*' ):
print (name)
print ( '\nNamed with wildcard ?:' )
for name in glob.glob( '/home/geeks/Desktop/gfg/data?.txt' ):
print (name)
print ( '\nNamed with wildcard ranges:' )
for name in glob.glob( '/home/geeks/Desktop/gfg/*[0-9].*' ):
print (name)
|
Output :
Using Glob() function to find files recursively
We can use the function glob.glob()
or glob.iglob()
directly from glob module to retrieve paths recursively from inside the directories/files and subdirectories/subfiles.
Syntax:
glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)
Note: When recursive is set True
“**
” followed by path separator('./**/')
will match any files or directories.
Example:
import glob
print ( "Using glob.glob()" )
files = glob.glob( '/home/geeks/Desktop/gfg/**/*.txt' ,
recursive = True )
for file in files:
print ( file )
print ( "\nUsing glob.iglob()" )
for filename in glob.iglob( '/home/geeks/Desktop/gfg/**/*.txt' ,
recursive = True ):
print (filename)
|
Output :
For older versions of python:
The most simple method is to use os.walk() as it is specifically designed and optimized to allow recursive browsing of a directory tree. Or we can also use os.listdir() to get all the files in directory and subdirectories and then filter out.
Let us see it through an example-
Example:
import os
for dirpath, dirs, files in os.walk( 'src' ):
for filename in files:
fname = os.path.join(dirpath,filename)
if fname.endswith( '.c' ):
print (fname)
for dirpath, dirs, files in os.walk( 'src' ):
for filename in fnmatch. filter (files, '*.c' ):
print (os.path.join(dirpath, filename))
path = "src"
dir_list = os.listdir(path)
for filename in fnmatch. filter (dir_list, '*.c' ):
print (os.path.join(dirpath, filename))
|
Output :
./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
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...