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

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

from os.path import join
import 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 , files

fTree = os.walk(path,topdown=True)
# 放三个list存放
dList = []  # 某档案的 path
sList = []  # 该档案同一层的 目录
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 fnmatch

filetypes = ['*.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()是否一次只能找一层 ??


<<:  以Postgresql为主,再聊聊资料库 PostgreSQL复制schema下table结构到另一schema的procedure及取样的研讨

>>:  Ruby幼幼班--Best Time to Buy and Sell Stock

[Day18] Unreal Webcam Fun

[Day18] Unreal Webcam Fun 需要用到的技巧与练习目标 MediaDevice...

Day 9 python函式

今天我们要介绍的是python的函式,所谓的函式就是指当我们需要做到重复的动作时可以使用函式来简化程...

D15 - 如何用 Apps Script 自动化地创造与客制 Google Docs?(二)快速生出大量寄件信封资料

今天的目标 每逢过年过节,不时会收到些礼物或送出些礼物,但要怎麽样依据不同的对象,来客制化我们的内容...

Day 0xE UVa10812 Beat the Spread!

Virtual Judge ZeroJudge 题意 输入比赛的分数总和及分差,输出两队分数 需要...

[Day22]C# 鸡础观念- 物件导向(oop)~物件(Object)

在程序语言中万物皆物件, 就如同真实世界中, 所有物质接由元素组成一般 物件基本原理 C#通过new...