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

16 comments on “Python – How to list all files in a directory?

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

     if ‘log*.txt’ not in file:

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

    Reply
  3. 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.

    Reply
  4. 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

    Reply
    1. 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

      Reply

Leave a Comment

Your email address will not be published. Required fields are marked *