os.walk(目录) - AttributeError:' tuple'对象没有属性' endswith'

时间:2016-10-01 00:58:02

标签: python python-3.5 os.walk os.path

我正在尝试在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),则会抛出错误:

  

"属性错误:'元组' object没有属性' endswith'"。

我在这里缺少什么?

提前致谢!

2 个答案:

答案 0 :(得分:1)

docs中描述了root, dirs, filesos.walk一起使用的原因:

  

对于以目录top(包括top本身)为根的树中的每个目录,它会产生一个3元组(dirpath,dirnames,filenames)。

所以,使用root, dirs, files是处理这个3元组产量的Pythonic方法。否则,您必须执行以下操作:

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

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

答案 1 :(得分:0)

os.walk()返回结果列表,每个结果本身都是一个元组。

如果为每个结果指定一个名称,那么该名称将是一个元组。

元组没有.endswith()方法。