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.

# Python 3

# traverse a dir.

import os

input_path = "/home/joe/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)

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:

# 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.

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

Python 3

Lang Detail

  1. Print Version String
  2. Quoting String
  3. String Operations
  4. Format String
  5. Operators
  6. Object, ID, Type


  1. Traverse Directory
  2. Sort List, Matrix, Object
  3. Python 3: Map with Side Effect Doesn't Work If Result is Not Used
  4. Python 3 Closure
  5. Python 2 and 3 Difference