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\
//...
Your article helped me!
Thanks a lot!
Thanks, very simple !
good one, like it
Can we filter using a wildcard in the filename in this line:
if ‘log*.txt’ not in file:
oh man, You did it very simple, Thanks!!
Thanks
Thanks alot . it’s very helpful
nice thanks!!
Thanks for the article, your solutions are so simple and perfect.
glob.glob returns a list already
thanks
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.
Thank you, It help me with a project.
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
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
hi