代码之家  ›  专栏  ›  技术社区  ›  user1785730

在python3中os.walk的迭代是如何工作的?

  •  0
  • user1785730  · 技术社区  · 6 年前

    docs os.walk

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

    这也不是:

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

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

    所有的例子 我找到了嵌入的 os.步行

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

    为什么?这里到底要迭代什么? root 是一根弦, dirs files 是列表。然而,大多数例子都会重复一遍 目录 :

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

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

    为什么三元组的赋值在 嵌入到for循环中,但不是没有?

    2 回复  |  直到 6 年前
        1
  •  4
  •   wjandrea sebs    6 年前

    os.walk 三元组,它 三元组。从 the docs

    对于树中以目录为根的每个目录 (包括 顶部 (dirpath, dirnames, filenames) .

    What does the "yield" keyword do? (您可以忽略OP给出的示例代码) 返回生成3元组的生成器。

    外部 for

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

    实际上与

    for branch in os.walk(top):
        dirpath, dirnames, filenames = branch
    
        2
  •  1
  •   mtt2p    6 年前

    os.walk返回 generator 如果要从生成器输出中查找值,请将其转换为列表:

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