os.walk(directory) - AttributeError: 'tuple' object has no attribute 'endswith'

os.walk(directory) - AttributeError: 'tuple' object has no attribute 'endswith'

我正在尝试在 python 中创建一个脚本来搜索特定类型的文件(例如:.txt.jpg 等)。我开始搜索了很长时间(包括 SO 中的帖子),我发现了以下代码片段:

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

但是,我不明白为什么要使用root, dirs, files。例如,如果我只使用 for file in os.walk(directory) 它会抛出错误:

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

我在这里错过了什么?

提前致谢!

os.walk() returns 结果列表,每个结果本身就是一个元组。

如果您为每个结果分配一个名称,那么该名称将是一个元组。

元组没有 .endswith() 方法。

root, dirs, filesos.walk 一起使用的原因在 docs:

中有所描述

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

因此,使用 root, dirs, files 是一种处理此 3 元组收益的 Pythonic 方式。否则,您必须执行以下操作:

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

元组没有 endswith 属性。元组中可能包含也可能不包含字符串。