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

如何在遍历目录并条件加载文件的for循环中使用tqdm进度条?

解决tqdm在条件加载目录文件时的进度条问题

你遇到的核心问题是:当前代码会为每个子目录的文件列表单独生成一个tqdm进度条,导致输出一堆零散的进度条,没法直观看到整体的加载进度。下面给你两种实用的解决方案:

方案1:先收集所有目标文件再遍历(简单直观)

这种方法先把所有符合startswith('Test')条件的文件路径收集起来,再用tqdm统一遍历,进度条会准确显示整体进度:

import os
from tqdm import tqdm

loaddir = r'D:\Folder'
print('Data load initiated')

# 第一步:收集所有符合条件的文件路径
target_files = []
for subdir, _, files in os.walk(loaddir):
    # 筛选出以Test开头的文件,拼接完整路径
    target_files.extend([os.path.join(subdir, name) for name in files if name.startswith('Test')])

# 第二步:用tqdm遍历处理文件
for file_path in tqdm(target_files, desc='Processing files'):
    # 在这里执行你的操作,比如读取文件、数据处理等
    # 示例:with open(file_path, 'r') as f: ...
    pass

方案2:先统计总数再逐文件更新(适合大文件场景)

如果目标文件数量极大,提前收集列表会占用过多内存,可以先遍历一次统计符合条件的文件总数,再用tqdm的total参数和update方法来更新进度:

import os
from tqdm import tqdm

loaddir = r'D:\Folder'
print('Data load initiated')

# 第一步:统计符合条件的文件总数
total_files = 0
for subdir, _, files in os.walk(loaddir):
    total_files += sum(1 for name in files if name.startswith('Test'))

# 第二步:初始化进度条并逐文件处理
with tqdm(total=total_files, desc='Processing files') as pbar:
    for subdir, _, files in os.walk(loaddir):
        for name in files:
            if name.startswith('Test'):
                file_path = os.path.join(subdir, name)
                # 执行你的操作
                # 示例:process_data(file_path)
                pbar.update(1)  # 每处理一个文件,进度条前进1格

为什么原来的代码会出问题?

你之前的代码在os.walk的每个子目录循环里,都给当前子目录的所有文件套了一个tqdm——这意味着每个子目录都会生成一个独立的进度条,不管里面有没有符合条件的文件,所以才会看到一堆零散的进度输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:25:00