Python中文件目录的递归打印

Python中文件目录的递归打印,python,recursion,Python,Recursion,我想知道如何用适当的缩进打印出目录中的每一项。我目前掌握的代码如下: import os def traverse(pathname,d): 'prints a given nested directory with proper indentation' indent = '' for i in range(d): indent = indent + ' ' for item in os.listdir(pathname):

我想知道如何用适当的缩进打印出目录中的每一项。我目前掌握的代码如下:

import os

def traverse(pathname,d):
    'prints a given nested directory with proper indentation'
    indent = ''
    for i in range(d):
        indent = indent + '  '
    for item in os.listdir(pathname):
        try:
            newItem = os.path.join(pathname, item)
            traverse(newItem,d+1)
        except:
            print(indent + newItem)
我的输出会打印出测试目录中的所有文件,但不会打印出文件夹名称。我得到的是:

>>> traverse('test',0)
test/fileA.txt
  test/folder1/fileB.txt
  test/folder1/fileC.txt
    test/folder1/folder11/fileD.txt
  test/folder2/fileD.txt
  test/folder2/fileE.txt
>>>
输出应该是什么:

>>> traverse('test',0)
test/fileA.txt
test/folder1
  test/folder1/fileB.txt
  test/folder1/fileC.txt
  test/folder1/folder11
    test/folder1/folder11/fileD.txt
test/folder2
  test/folder2/fileD.txt
  test/folder2/fileE.txt
>>>

有人能告诉我我需要对代码做什么才能显示文件夹名称吗?我尝试打印出路径名,但每次Python打印出文件名时,它都会重复文件夹名,因为它处于for循环中。在正确的方向轻推将是非常感激的

不使用os.walk的递归目录打印函数可能如下所示:

def traverse(root, depth, indent=''):
  for file_ in os.listdir(root):
    leaf = os.path.join(root, file_)
    print indent, leaf
    if os.path.isdir(leaf) and depth:
      traverse(leaf, depth-1, indent + '  ')

我不赞成教人们避免固有的想法。有很多方法可以教递归,而不会让人忽视他们正在学习的语言的更好方面。这是我的观点,显然不是很多教授都认同的观点。

无论文件名是否为目录,都需要打印文件名,例如:

for item in os.listdir(pathname):
    try:
        newItem = os.path.join(pathname, item)
        print(indent + newItem)
        traverse(newItem,d+1)
    except:
        pass
虽然我不希望使用异常来检测它是否是目录,但是如果允许使用
os.path.isdir

for item in os.listdir(pathname):
    newItem = os.path.join(pathname, item)
    print(indent + newItem)
    if (os.path.isdir(newItem)):
        traverse(newItem,d+1)

这是一个我只能使用os.path和os.listdir的问题。我想使用其他方法,但我认为我应该在不使用其他操作系统方法的情况下创建一个函数。您仍然可以在第一个for循环中打印路径名,但要进行一些截断,以使完整文件路径看起来像文件夹位置。我以前说过,我要再说一遍——强迫某人避免语言中的内置功能会适得其反。如果教授能想出教递归的唯一方法就是遍历目录,那么它们正在造成损害。使用语言所提供的,以更好的方式教授概念。哦…你是非常正确的。我真傻。谢谢!我能理解你的观点。我确实认为教授编程语言意味着探索、尝试和错误,而不是限制我们。