Python 3: Traverse Directory
Here's a example of using
os.walk() to visit all files in a directory and all its subdirectories.
# -*- coding: utf-8 -*- # Python 3 # traverse a dir. import os input_path = "/home/jane/web/" for dir_path, subdir_list, file_list in os.walk(input_path): for fname in file_list: full_path = os.path.join(dir_path, fname) print(full_path)
os.walk(input_path) will visit input_path and EVERY nested sub directory of input_path.
For each dir visit, starting with input_path, “os.walk()” returns a “generator” (a list-like thing), where each element is a tuple of this format:
- full_path_of_dir → full path of current directory.
- subdir_names_list → list of subdir names (not full path) that are immediate children.
- file_name_list → list of file names (not full path) that are immediate children.
If the current dir doesn't have subdir or files, it'll be a empty list.
Return Type of os.walk
os.walk() returns a generator object.
# -*- coding: utf-8 -*- # Python 3 import os print( os.walk("/home/")) # prints <generator object walk at 0xb705561c> print( type(os.walk("/home/"))) # prints <class 'generator'>
“generator” is like a list, but more efficient because it doesn't actually compute the result until needed. You can convert the result of generator into a list by calling
# -*- coding: utf-8 -*- # Python 3 import os print( list( os.walk("/home/") ) )
os.walk() is new in Python 3, but also available in python 2.7.x.
In older version of Python 2, you'll need to use
os.path.walk(). For how, see: Python: Traverse Directory.
If you have a question, put $5 at patreon and message me.