问题描述
我正在研究 os.walk() 方法。
for root,dirs,files in os.walk(trackeddir):
for name in files:
print(os.path.join(root,name))
for name in dirs:
print(os.path.join(root,name))
...
但是,当我尝试:root,files = os.walk(trackeddir)
时,出现异常:“解包的值太多(预期为 3)”
我尝试将 os.walk() 的输出放入一个变量中,并在调试期间查看该变量中存储的内容,但我无法看到任何“根”、“文件”或“目录” 我希望看到一个元组,但相反,我看到了一个 'generator' 实例
我是一个相对“OK”的 Java 开发人员,这种在运行时处理数据的新风格确实令人困惑。任何试图帮助我解决它的帮助将不胜感激!
解决方法
这是因为 os.walk
是一个生成器。当您迭代生成器时,它将产生下一个元素,直到没有元素剩余。请注意,您可以在变量中定义生成器,然后无需循环即可获取下一组元素:
g = os.walk(tracckeddir)
r,d,f = next(g)
要返回将生成的整个元素集,您可以应用list()
:
list(os.walk(trackeddir))