Python中的文件目录递归打印
我正在尝试找出如何以合适的缩进打印出目录中的每个项目。到目前为止,我的代码如下:
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打印出文件名时,它都会重复文件夹的名字,因为这在一个循环里。任何小提示都会非常感谢!
2 个回答
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 + ' ')
我不太赞成教人们避开内置函数来强调某个概念。其实有很多方法可以教递归,而不需要让人忽视他们正在学习的语言中的一些细节。不过这只是我的看法,显然并不是很多教授的想法。
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)