打印出整个目录树

问题描述

我现在的代码:

import os

Tree = {}
Tree = os.listdir('Dir')

>>> print(Tree)
['New Folder', 'Textfile1.txt', 'Textfile2.txt']

这不会打印出子目录中的文件.(新建文件夹是一个子目录).

That doesn't print out the files in the subdirectories. (New Folder is a subdirectory).

我的问题是,如何输出目录下的所有文件和子目录下的文件?

My question is, how can I output all the files in the directory and the files in subdirectories?


解决方案

import os 
def Test1(rootDir): 
    list_dirs = os.walk(rootDir) 
    for root, dirs, files in list_dirs: 
        for d in dirs: 
            print os.path.join(root, d)      
        for f in files: 
            print os.path.join(root, f) 

或者:

import os 
def Test2(rootDir): 
    for lists in os.listdir(rootDir): 
        path = os.path.join(rootDir, lists) 
        print path 
        if os.path.isdir(path): 
            Test2(path)

对于测试文件树:

E:TEST 
│--A 
│  │--A-A 
│  │  │--A-A-A.txt 
│  │--A-B.txt 
│  │--A-C 
│  │  │--A-B-A.txt 
│  │--A-D.txt 
│--B.txt 
│--C 
│  │--C-A.txt 
│  │--C-B.txt 
│--D.txt 
│--E 

运行以下代码:

Test1('E:TEST') 
print '=======================================' 
Test2('E:TEST') 

您可以看到结果之间存在差异:

You can see there are difference between the results:

>>>  
E:TESTA 
E:TESTC 
E:TESTE 
E:TESTB.txt 
E:TESTD.txt 
E:TESTAA-A 
E:TESTAA-C 
E:TESTAA-B.txt 
E:TESTAA-D.txt 
E:TESTAA-AA-A-A.txt 
E:TESTAA-CA-B-A.txt 
E:TESTCC-A.txt 
E:TESTCC-B.txt 
======================================= 
E:TESTA 
E:TESTAA-A 
E:TESTAA-AA-A-A.txt 
E:TESTAA-B.txt 
E:TESTAA-C 
E:TESTAA-CA-B-A.txt 
E:TESTAA-D.txt 
E:TESTB.txt 
E:TESTC 
E:TESTCC-A.txt 
E:TESTCC-B.txt 
E:TESTD.txt 
E:TESTE 
>>> 

要将它们保存在列表中:

To save them in a list:

import os 
files = []
def Test1(rootDir):
    files.append(rootDir)
    list_dirs = os.walk(rootDir) 
    for root, dirs, files in list_dirs: 
        for d in dirs: 
            files.append(os.path.join(root, d))      
        for f in files: 
            files.append(os.path.join(root, f))

import os 
files = [rootDir]
def Test2(rootDir):
    for lists in os.listdir(rootDir): 
        path = os.path.join(rootDir, lists) 
        files.append(path) 
        if os.path.isdir(path): 
            Test2(path)

相关文章