简体   繁体   中英

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!

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM