Python 3: Traverse Directory

By Xah Lee. Date: . Last updated: .

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, subdir_names_list, file_name_list )

If the current dir doesn't have subdir or files, it'll be a empty list.

Return Type of os.walk

the 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 list(). Example:

# -*- coding: utf-8 -*-
# Python 3

import os

print( list( os.walk("/home/") ) )

Note: 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.

16.1. os — Miscellaneous operating system interfaces — Python v3.3.3 documentation #os.walk

If you have a question, put $5 at patreon and message me.