0

我尝试创建一个可以递归遍历多个目录并以分层方式打印文件列表的程序,例如:

Folder
----x.c
----x.bin
----Folder
---------x.c

我尝试使用(带有文件/文件夹详细信息)之类的程序:

#!/usr/bin/python

import os
for item in os.listdir(".") :
        if os.path.isdir(item) :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        elif os.path.isfile(item) :
                print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "Nothing \n"

但我不能进入我尝试使用的任何目录(A 是这里的目录):

#!/usr/bin/python

import os
for item in os.listdir(".") :
        if os.path.isdir(item) :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        elif os.path.isfile(item):
                print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "Nothing"

for item in os.listdir("A") :
        if os.path.isdir("A") :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)

        elif os.path.isfile("A") :
                print "--" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "Nothing"

清单是错误的,我不明白为什么我不能从 . 到 A 以及如何做。最糟糕的是,如果我继续 B(这里的第二个文件夹):

#!/usr/bin/python

import os
for item in os.listdir(".") :
        if os.path.isdir(item) :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        elif os.path.isfile(item):
                print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "dunno"

for item in os.listdir("A") :
        if os.path.isdir("A") :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)

        elif os.path.isfile("A") :
                print "--" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "lulz"

for item in os.listdir("A/B") :
        if os.path.isfile("A/B") :
                print "---" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print 'Nothing'
4

2 回答 2

1

我想你想用os.walk

for (cur, dirs, files) in os.walk('.'):
    pass

这将为您提供当前目录、当前目录中的目录列表和当前目录中的文件列表。

我想你想要类似的东西

for (cur, dirs, files) in os.walk('.'):
    depth = len(cur.split('/'))
    print "--" * depth, cur
    for fname in files:
        print "--" * (depth + 1), fname
于 2013-04-12T17:15:40.653 回答
0

从这个答案中借了一点:List directory tree structure using Python

import os

def list_files(path, spaceChar=' ', spaceWidth=4):
    for root, dirs, files in os.walk(path):
        level = root.replace(path, '').count(os.sep)
        indent = spaceChar * (spaceWidth * level)
        print('{}{}/'.format(indent, os.path.basename(root)))
        subindent = spaceChar * spaceWidth * (level + 1)
        for f in files:
            print('{}{}'.format(subindent, f))

list_files(".", "-", 3)
于 2013-04-12T17:25:59.743 回答