如何迭代手术室步行在Python3中工作?

2024-09-29 19:20:18 发布

您现在位置:Python中文网/ 问答频道 /正文

根据python3docsos.walk返回一个3元组。但是,这不起作用:

root, dirs, files = os.walk('path')

这也不是:

^{pr2}$

它总是产生:

ValueError: not enough values to unpack (expected 3, got 1)

我在for循环中找到了os.walk的所有示例:

for root, dirs, files in os.walk('path'):

为什么?这里到底要迭代什么?root是一个字符串,dirs和{}是列表。但是,大多数示例都会在dirsfiles上重复:

for root, dirs, files in os.walk('path'):
    for name in files:
        print(name)
    for name in dirs:
        print(name)

内部for循环对我来说是有意义的,但我不明白外部for循环的用途。在

为什么当os.walk嵌入for循环中时,对3元组的赋值会起作用,但是没有for循环就不行了?在


Tags: pathnamein示例forosrootfiles
2条回答

在手术室步行返回一个generator不是元组! 如果要从生成器输出中查找值,请将其转换为列表:

test = list(os.walk("."))

os.walk返回一个3元组,它生成多个3元组。来自the docs

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

有关生成的工作原理,请参见What does the "yield" keyword do?(可以忽略OP给出的示例代码)。技术上,os.walk返回生成3元组的生成器。在

外部for循环在3元组上迭代。你可能会被同一步骤中发生的解包弄糊涂了。所以说清楚

for dirpath, dirnames, filenames in os.walk(top):

实际上与

^{pr2}$

相关问题 更多 >

    热门问题