Python递归获取指定文件夹下所有指定后缀的文件路径

程序分为两步,第一步,采用递归的方式获得文件夹下所有文件的路径列表;第二步,从文件路径列表中根据后缀利用.endswith(后缀)的方法筛选指定文件。直接上完整程序,说明以注释的方式给出。

程序中涉及到了 list循环remove的问题

import os

# 从指定path下递归获取所有文件
def getAllFile(path, fileList):
    dirList = []    # 存放文件夹路径的列表
    for ff in os.listdir(path):
        wholepath = os.path.join(path, ff)
        # wholepath = path+'/'+ff
        if os.path.isdir(wholepath):
            dirList.append(wholepath)   # 如果是文件添加到结果文件列表中

        if os.path.isfile(wholepath):
            fileList.append(wholepath)  # 如果是文件夹,存到文件夹列表中

    for dir in dirList:
        getAllFile(dir, fileList)   # 对于dirList列表中的文件夹,递归提取其中的文件,fileList一直在往下传,所有的文件路径都会被保存在这个列表中

# 从文件路径列表中筛选出指定后缀的文件
# 这里可以从源列表中删除 非后缀 项,也可以新建一个 后缀列表,遍历源列表向后缀列表中.append()后缀项
# 后者更容易一些,我这里选择了前者,还费劲解决了一波list循环remove的问题。。。
# list循环remove http://itdarcy.wang/index.php/20200109/381
def getSufFilePath(fileList, suffix):
    # print(len(fileList))
    for ff in fileList[:]:
        if not ff.endswith(suffix):
                fileList.remove(ff)
                
if __name__ == '__main__':
    flist = []
    findpath = r'D:\Test'
    getAllFile(findpath, flist)
    print('allfile:', len(flist))	# filepath下的文件总数
    getSufFilePath(flist, '.doc')

    print('Docfile:', len(flist))	# filepath下的指定文件总数(这里是.doc文件的数量)
    for ff in flist:
        print(ff)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BBJG_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值