You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用os.walk/pathlib筛选CR2/CR3文件并实现分批处理?

解决方案:用pathlib高效筛选RAW文件并分批处理

一、用pathlib替代os.walk筛选目标文件

pathlib的rglob()方法可以递归遍历所有文件,结合后缀判断就能精准筛选CR2/CR3(含大小写)的文件,同时能轻松处理目录筛选条件:

from pathlib import Path

# 初始化根目录路径
root_path = Path(cfg.RAWIMG_DIR)

# 先筛选出名称大于'10'的子目录并排序
valid_dirs = sorted([d for d in root_path.iterdir() if d.is_dir() and d.name > '10'])

# 收集符合条件的文件
target_files = []
for dir_path in valid_dirs:
    # 递归遍历目录下所有文件,筛选后缀含'cr'的(不区分大小写)
    for file_path in dir_path.rglob('*'):
        if file_path.is_file() and 'cr' in file_path.suffix.lower():
            target_files.append(file_path)

如果想节省内存,也可以用生成器直接迭代,避免一次性加载所有文件路径:

valid_files = (
    file_path
    for dir_path in sorted(d for d in root_path.iterdir() if d.is_dir() and d.name > '10')
    for file_path in dir_path.rglob('*')
    if file_path.is_file() and 'cr' in file_path.suffix.lower()
)

二、分批处理文件

按每10个一批拆分文件列表,提供两种实现方式:

方式1:列表切片(适合文件总数不大的场景)

batch_size = 10
for i in range(0, len(target_files), batch_size):
    batch = target_files[i:i+batch_size]
    # 执行当前批次的处理逻辑
    print(f"处理第{i//batch_size +1}批,共{len(batch)}个文件")
    for file in batch:
        # 你的文件处理代码
        pass

方式2:生成器分批(适合超大文件列表,节省内存)

def batch_generator(items, batch_size):
    batch = []
    for item in items:
        batch.append(item)
        if len(batch) == batch_size:
            yield batch
            batch = []
    if batch:
        yield batch

# 用生成器分批迭代文件
for batch in batch_generator(valid_files, 10):
    print(f"处理一批,共{len(batch)}个文件")
    for file in batch:
        # 你的文件处理代码
        pass

三、获取目录名称列表

如果需要单独提取符合条件的目录名称或路径,直接从之前的valid_dirs中获取即可:

# 获取目录名称列表
valid_dir_names = [d.name for d in valid_dirs]
# 获取目录完整路径列表
valid_dir_paths = [str(d) for d in valid_dirs]

补充说明

原代码中的if dir > '10'应为笔误,这里默认是筛选**目录名称大于'10'**的子目录;若你需要筛选路径中某一层级的目录满足条件,可调整d.name为对应层级的判断逻辑。

内容的提问来源于stack exchange,提问作者user16971617

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:42:53