Python实现搜索包含指定子文件夹名的子目录内所有文件
扫描名称含'May'的子文件夹中的文件
下面给你几种适合新手的实现方式,都是基于你提到的几个库:
方法1:使用glob库
glob的通配符匹配很适合这种场景,一行就能搞定递归查找:
import glob # 匹配C:/main下所有二级目录中带May的文件夹,递归获取里面的所有文件 file_list = glob.glob('C:/main/*/May*/**/*', recursive=True) # 打印所有找到的文件路径 for file_path in file_list: print(file_path)
*:匹配任意长度的任意字符(除了路径分隔符)**:开启递归后,匹配任意深度的子目录recursive=True:必须加上才能让**生效
方法2:使用pathlib库(Python3.4+推荐)
pathlib是更现代的路径处理库,语法更直观:
from pathlib import Path # 定义根目录 root = Path('C:/main') # 递归查找所有名称包含May的文件夹 for may_folder in root.rglob('May*'): if may_folder.is_dir(): # 确保找到的是文件夹 # 遍历该文件夹下的所有文件 for file in may_folder.iterdir(): if file.is_file(): # 只筛选文件,排除子目录 print(file)
rglob('May*'):递归查找所有名称以May开头的路径(也可以改成'*May*'匹配任意位置含May的)is_dir()和is_file():用来区分文件夹和文件,避免误输出
方法3:使用os.walk库(传统通用方法)
os.walk是最基础的目录遍历方法,兼容性好,适合理解底层逻辑:
import os root_dir = 'C:/main' # 遍历根目录下的所有层级 for current_path, subfolders, files in os.walk(root_dir): # 检查当前目录的名称是否包含May if 'May' in os.path.basename(current_path): # 输出当前目录下的所有文件 for file_name in files: full_file_path = os.path.join(current_path, file_name) print(full_file_path)
os.walk返回三个值:当前目录路径、当前目录下的子文件夹列表、当前目录下的文件列表os.path.basename(current_path):获取当前目录的名称(比如从C:/main/canada/May 2022拿到May 2022)
内容的提问来源于stack exchange,提问作者Alan H
相关产品推荐
相关产品推荐

