Os. Walk(Directory) - Attributeerror: 'Tuple' Object Has No Attribute 'Endswith'

I am trying to make a script in python to search for certain type of files (eg: .txt, .jpg, etc.). I started searching around for quite a while (including posts here in SO) and I found the following snippet of code:

for root, dirs, files in os.walk(directory):
    for file in files:
        if file.endswith('.txt'):
            print file

However, I can't understand why root, dirs, files is used. For example, if I just use for file in os.walk(directory) it throws the error:

"AttributeError: 'tuple' object has no attribute 'endswith'".

What am I missing here?

Thanks in advance!

0

2 Answers

The reason why you use root, dirs, files with os.walk is described in the docs:

For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames, filenames).

so, using root, dirs, files is a Pythonic way of handling this 3-tuple yield. Otherwise, you'd have to do something like:

data = os.walk('/')
for _ in data:
    root = _[0]
    dirs = _[1]
    files = _[2]

Tuples don't have an endswith attribute. Strings, which may or may not be contained in the tuple, do.

2

os.walk() returns a list of results, each of which is itself a tuple.

If you assign a single name to each result, then that name will be a tuple.

Tuples do not have a .endswith() method.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Sarah Jenkins

Sarah Jenkins

Senior Technology Editor & AI Specialist

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.

Share this article
Twitter Facebook Pinterest