列举子目录所有档案Python os.walk + filter

如何列举子目录所有档案 ? + 条件搜寻 ?
os.walk() 的用法釐清,记录一下体会心得,以下如有错误请指正。
source osWalkTest01.py

from os.path import joinimport os# 程式所在之目录位置pathHere = os.getcwd()# 指定搜寻之目录path = input('从哪个资料夹 开始搜寻 ? ')print(f'Dir to be searched: {path}')

fTree 传回一个tuple,包含三元素
dirs 该层的 path
subdirs 该层的 目录s
files 该层的 档案s
topdown = True 从上向下找

第二个元素 subdirs 是个list,代表与档案同一层的其它目录,如果是空[],表示没有下一层了。
# os.walk 递迴找出所有档案# fTree 传回一个tuple,包含三元素 dirs, subdirs , filesfTree = os.walk(path,topdown=True)# 放三个list存放dList = []  # 某档案的 pathsList = []  # 该档案同一层的 目录fList = []  # 该档案的fullPathName # 逐层向下for dirs, subdirs, files in fTree:    for f in files:         # 添加入 list        dList.append(dirs)        sList.append(subdirs)        # dirs+f 组合成 档案的fullpathname         fullpath = join(dirs,f)        fList.append(fullpath)

此时 dirs, subdirs,files 只是最后一个folder的搜寻结果,并不是全部档案的path

# 检视成果        print(f'dir count  : {len(dList)}')print(f'sList count: {len(sList)}')print(f'file count : {len(fList)}')# 印出来看看for f in range(len(fList)):    print(dList[f],sList[f],fList[f])# 把结果存档,以供验证txt = open(pathHere+'\\walkResult.txt','w',encoding='utf-8') for f in range(len(fList)):    print(f'{dList[f]}  {sList[f]} {fList[f]}',file=txt)txt.close()

上面是搜寻*.*所有档,那么如果要加上搜寻条件该如何写 ?
运用 import fnmatch

import fnmatchfiletypes = ['*.jpg', '*.doc','*.pdf']for dirs, subdirs, files in os.walk( path ):for extension in ( tuple(filetypes) ):for filename in fnmatch.filter(files, extension):filepath = os.path.join(dirs, filename)if os.path.isfile( filepath ):                print( filepath )

嗯,又来了个新模块 fnmatch,看来又有功课要研究了。
ps. glob.glob()也可以达到上述功能,不过目前还卡在: 一个. 两个.. \ / 这类的问题上
不过,glob()是否一次只能找一层 ??


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章