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, files
与 os.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
属性。元组中可能包含也可能不包含字符串。
我正在尝试在 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, files
与 os.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
属性。元组中可能包含也可能不包含字符串。