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.