Java IO Tutorial

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 Author

author image
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

Subscribe
Notify of
16 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
daniel
4 years ago

Your article helped me!

Thanks a lot!

Kübra
3 years ago

Thanks, very simple !

Dan
4 years ago

good one, like it

Ahmad Bagadood
3 years ago

Can we filter using a wildcard in the filename in this line:

 if ‘log*.txt’ not in file:

Brayan
3 years ago

oh man, You did it very simple, Thanks!!

vini
4 years ago

Thanks

Safi Ullah
4 years ago

Thanks alot . it’s very helpful

adre
4 years ago

nice thanks!!

kalyan
4 years ago

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

laridzhang
4 years ago

glob.glob returns a list already

Amine
4 years ago

thanks

John
4 years ago

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
4 years ago

Thank you, It help me with a project.

Charles
4 years ago

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

Puneet
4 years ago
Reply to  Charles

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

Helol
4 years ago
Reply to  Charles

hi