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

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
Author

Sarah Jenkins

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.