python3 使用os.walk()方法遍历文件夹的执行过程

os.walk()简介

我们知道,Python 中os.walk()方法是返回三个值,分别是:
1、当前文件夹名称的字符串(下面的示例中用folder变量表示);
2、当前文件夹中的子文件夹名称字符串列表((下面的示例中用subfolders变量表示);)
3、当前文件夹中的文件名称(包括子文件夹中的文件名称)字符串列表(下面的示例中用files变量表示)。
因此,可以使用os.walk()方法遍历选定的文件夹,找到指定的文件夹或文件。
具体执行过程见代码及输出结果,可以看出来 for 语句执行os.walk()方法的循环过程:
1、先列出当前文件夹下的所有文件夹及文件(文件仅限于当前文件下的文件,不包括子文件中的文件)
2、列出第一个子文件夹中的子文件夹及文件(同上)
3、列出第一个子文件夹中的子文件夹中的文件
4、列出第二个子文件夹中的子文件夹及文件(同上)
5、列出第二个子文件夹中的子文件夹中的文件
6、列出第三个子文件夹中文件(此文件再无子文件夹)
以此类推
可以从执行结果看出:
1、for循环是以当前文件夹所包含的所有文件夹(包括子文件夹、孙文件夹等)的个数为循环次数。
2、子文件夹循环是当根据子文件夹(不包括它下面的子文件夹、孙文件夹等)的个数为循环次数。
3、文件循环是根据文件夹中(不包括它下面的子文件夹、孙文件夹等中的文件)的文件个数为循环次数。

文件夹结构如下图:

在这里插入图片描述

代码如下:

#!python3

import tkinter as tk, os
from tkinter import filedialog

root = tk.Tk()
root.withdraw()

#获取文件夹
SourceFolder = filedialog.askdirectory(title = '请选择要检索大文件的磁盘或文件夹:')

if len(SourceFolder) <= 0:
    print('未找到文件夹!程序中止。')
    sys.exit()

(a,b,c,bz,cz) = (0,0,0,0,0)

for folder, subfolders, files in os.walk(SourceFolder) :  #主循环
    a += 1
    b = 0
    c = 0 
    for subfolder in subfolders :  #子文件夹循环
        b += 1
        bz += 1
        print(folder +'/'+ subfolder + '  主循环'+str(a)+' 文件夹循环'+str(b))

    for file in files :   #文件循环
        c += 1
        cz += 1
        print(folder +'/'+ file + '  主循环'+str(a)+' 文件夹循环'+str(b)+' 文件循环'+str(c))

print('主循环次数%d' % a)
print('子文件夹循环次数%d' % bz)
print('文件循环次数%d' % cz)

输出如下:
C:/test/001 主循环1 文件夹循环1
C:/test/002 主循环1 文件夹循环2
C:/test/003 主循环1 文件夹循环3
C:/test/主1.txt 主循环1 文件夹循环3 文件循环1
C:/test/主2.txt 主循环1 文件夹循环3 文件循环2
C:/test\001/00101 主循环2 文件夹循环1
C:/test\001/11.txt 主循环2 文件夹循环1 文件循环1
C:/test\001/12.txt 主循环2 文件夹循环1 文件循环2
C:/test\001/13.txt 主循环2 文件夹循环1 文件循环3
C:/test\001\00101/0010101.txt 主循环3 文件夹循环0 文件循环1
C:/test\002/00201 主循环4 文件夹循环1
C:/test\002/21.txt 主循环4 文件夹循环1 文件循环1
C:/test\002/22.txt 主循环4 文件夹循环1 文件循环2
C:/test\002\00201/0020101.txt 主循环5 文件夹循环0 文件循环1
C:/test\003/31.txt 主循环6 文件夹循环0 文件循环1
C:/test\003/32.txt 主循环6 文件夹循环0 文件循环2
主循环次数6
子文件夹循环次数5
文件循环次数11

大家觉得可以的话,可以帮忙点个赞吗?

猜你喜欢

转载自blog.csdn.net/any1where/article/details/128397838
今日推荐