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