使用os.walk()解决Python中的递归问题

0 投票
1 回答
2914 浏览
提问于 2025-04-28 11:43

我刚开始学习Python(之前主要用C#),所以还在摸索函数的返回结果应该是什么样的。我在写一个递归函数,用来遍历目录结构时,遇到了一些奇怪的结果。 我在使用os.walk()这个函数,感觉当我深入到某个目录后,返回的“目录”结果在找到一个空文件夹时并没有被清空。 我现在用的是Eclipse作为我的开发环境,Python版本是2.7。

def CheckSubFolder( folder ):

    print "Checking folders in : " + folder;

    for (root, directories, files) in os.walk(folder):
        for folder2 in directories:
            print folder2;

        for folder2 in directories:
            CheckSubFolder( folder + "\\" + folder2);

    return;

# Code Entry
InFolder = sys.argv[1];
CheckSubFolder( InFolder );
sys.exit(); 

这是我使用的示例目录结构。

State
    -> 1
        -> 2
        -> 3
            -> 4
            -> 5
                -> 6
                -> 7

以下是我得到的结果:

Checking folders in : \\State
1
Checking folders in : \\State\1
2
3
Checking folders in : \\State\1\2
Checking folders in : \\State\1\3
4
5
Checking folders in : \\State\1\3\4
Checking folders in : \\State\1\3\5
6
7
Checking folders in : \\State\1\3\5\6
Checking folders in : \\State\1\3\5\7
6
7
Checking folders in : \\State\1\3\6
Checking folders in : \\State\1\3\7
4
5
Checking folders in : \\State\1\4
Checking folders in : \\State\1\5
6
7
Checking folders in : \\State\1\6
Checking folders in : \\State\1\7
暂无标签

1 个回答

3

os.walk 这个函数本身是会自动进行递归的,所以你不需要自己再去递归调用它。

def CheckSubFolder( folder ):
    for root, directories, files in os.walk(folder):
        for d in directories:
            print "folder : " os.path.join(root, d)
        for f in files:
            print "file   : " os.path.join(root, f)

# Code Entry
path = sys.argv[1]
CheckSubFolder(path)

撰写回答