我正在尝试弄清楚如何使用适当的缩进打印出目录中的每个项目。我到目前为止的代码如下:
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循环中。非常感谢正确方向的推动!
答案 0 :(得分:1)
您需要打印文件名,无论它是否是目录,如:
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)
答案 1 :(得分:0)
不使用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 + ' ')
我不赞成教导人们避免使用内置插件试图将概念推向家庭。有很多方法可以教导递归,而不会让某些人忽略他们正在学习的语言的精细方面。这是我的观点,显然不是许多教授所共有的。