Python – How to list all files in a directory?

In Python, we can use os.walker or glob to create a find() like function to search or list files or folders in a specified directory and also it’s subdirectories.

1. os.walker

1.1 List all .txt files in a specified directory + subdirectories.


import os

path = 'c:\\projects\\hc2\\'

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.txt' in file:
            files.append(os.path.join(r, file))

for f in files:
    print(f)

Output


c:\projects\hc2\app\readme.txt
c:\projects\hc2\app\release.txt
c:\projects\hc2\web\readme.txt
c:\projects\hc2\whois\download\afrinic.txt
c:\projects\hc2\whois\download\apnic.txt
c:\projects\hc2\whois\download\arin.txt
c:\projects\hc2\whois\download\lacnic.txt
c:\projects\hc2\whois\download\ripe.txt
c:\projects\hc2\whois\out\test\resources\asn\afrinic\3068.txt
c:\projects\hc2\whois\out\test\resources\asn\afrinic\37018.txt
//...

1.2 List all directories in a specified directory + subdirectories.


import os

path = 'c:\\projects\\hc2\\'

folders = []

# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for folder in d:
        folders.append(os.path.join(r, folder))

for f in folders:
    print(f)

Output


c:\projects\hc2\
c:\projects\hc2\analyzer\
c:\projects\hc2\analyzer\out\
c:\projects\hc2\analyzer\out\production\
c:\projects\hc2\analyzer\out\production\classes\
c:\projects\hc2\analyzer\out\production\classes\com\
//...

2. glob

Changed in version 3.5: Support for recursive globs using **.

2.1 List all .txt files in a specified directory + subdirectories (**).


import glob

path = 'c:\\projects\\hc2\\'

files = [f for f in glob.glob(path + "**/*.txt", recursive=True)]

for f in files:
    print(f)

Output


c:\projects\hc2\app\readme.txt
c:\projects\hc2\app\release.txt
c:\projects\hc2\web\readme.txt
c:\projects\hc2\whois\download\afrinic.txt
c:\projects\hc2\whois\download\apnic.txt
c:\projects\hc2\whois\download\arin.txt
c:\projects\hc2\whois\download\lacnic.txt
c:\projects\hc2\whois\download\ripe.txt
c:\projects\hc2\whois\out\test\resources\asn\afrinic\3068.txt
c:\projects\hc2\whois\out\test\resources\asn\afrinic\37018.txt
//...

2.2 List all directories in a specified directory + subdirectories (**).


import glob

folders = [f for f in glob.glob(path + "**/", recursive=True)]

for f in folders:
    print(f)

Output


c:\projects\hc2\
c:\projects\hc2\analyzer\
c:\projects\hc2\analyzer\out\
c:\projects\hc2\analyzer\out\production\
c:\projects\hc2\analyzer\out\production\classes\
c:\projects\hc2\analyzer\out\production\classes\com\
//...

References

  1. Pyhton docs – glob
  2. Python docs – os.walker

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

avatar
8 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
10 Comment authors
kalyanlaridzhangDanAmineJohn Recent comment authors
newest oldest most voted
daniel
Guest
daniel

Your article helped me!

Thanks a lot!

kalyan
Guest
kalyan

Thanks for the article, your solutions are so simple and perfect.

Dan
Guest
Dan

good one, like it

John
Guest
John

Hi,

Thanks for sharing. It would be great to name your variables with more meaningful values so you will know a bit more what is going on.

movax01
Guest
movax01

Thank you, It help me with a project.

Charles
Guest
Charles

Do you know of any way to carry out the task of listing all files in a web directory? I am trying to do a mass download of images from a web directory. Do you know how to get the list of names or would you suggest a method to download all of the contents of a web directory from a server? Thanks

Helol
Guest
Helol

hi

Puneet
Guest
Puneet

You should try web scraping , there are lot of good library in python , which you can use for this, Let me know what is the exact need and i can share some code or some ideas

laridzhang
Guest
laridzhang

glob.glob returns a list already

Amine
Guest
Amine

thanks