首页 > 解决方案 > 如何使递归工作以显示所有目录及其子目录?

问题描述

在这段代码中,我想打印所有目录及其子目录等。我为此使用了递归。但它给了我以下错误?

错误

Traceback (most recent call last):
  File "main.py", line 20, in <module>
    filesystem("/home/runner/TestP1")
  File "main.py", line 17, in filesystem
    filesystem(dirs)
  File "main.py", line 11, in filesystem
    dirfiles = os.listdir(dirname)
TypeError: listdir: path should be string, bytes, os.PathLike, integer or None, not list

代码

import os

def filesystem(dirname):
    dirfiles = os.listdir(dirname)
    fullpaths = map(lambda name: os.path.join(dirname, name), dirfiles)
    dirs = []

    for file in fullpaths:
        if os.path.isdir(file): dirs.append(file)
    filesystem(dirs)
    print(list(dirs))

filesystem("/home/runner/TestP1")

标签: pythonpython-3.x

解决方案


替换filesystem(dirs)为:

for dirname in dirs:
    filesystem(dirs)

另请注意:

  1. 在 2021 年,您应该使用pathlib。尤其glob是令人难以置信的有用。
  2. 在 Linux 中,请注意符号链接/硬链接,这可能很容易导致无限递归。

推荐阅读