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

如何使用tqdm在Python中复制单个大文件时显示进度条?

用tqdm实现单个大文件复制的进度条显示

单个大文件复制的核心是基于字节数的进度跟踪,和多文件按文件数量统计进度的逻辑完全不同。下面是直接可用的实现代码,通过分块读写+ tqdm字节级跟踪来实现精准进度条:

import os
from tqdm import tqdm

def copy_large_file(src_path, dst_path, chunk_size=1024*1024):
    # 获取源文件总字节数,作为进度条的总进度基准
    total_bytes = os.path.getsize(src_path)
    
    # 以二进制模式打开源文件和目标文件
    with open(src_path, 'rb') as src, open(dst_path, 'wb') as dst:
        # 初始化tqdm进度条:设置总大小、自动换算单位、添加描述文本
        with tqdm(
            total=total_bytes,
            unit='B',
            unit_scale=True,
            unit_divisor=1024,
            desc=f"复制文件: {os.path.basename(src_path)}",
            leave=True
        ) as progress_bar:
            # 分块读取写入,直到文件结束
            while chunk := src.read(chunk_size):
                dst.write(chunk)
                # 按实际写入的字节数更新进度条
                progress_bar.update(len(chunk))

# 调用示例
copy_large_file("/home/user/backup/data.tar.gz", "/mnt/external_drive/data.tar.gz")

关键细节说明:

  • 分块读写:避免一次性将大文件加载到内存中,chunk_size建议设为1MB~16MB,可根据你的内存情况调整。
  • 字节级进度跟踪:进度条的total参数设为文件总字节数,每次写入后更新实际写入的字节数,确保进度完全准确。
  • 直观的单位显示:unit_scale=True和unit_divisor=1024会自动将字节转换为KB/MB/GB,避免显示冗长的数字。

和多文件复制的区别:多文件场景通常是按文件数量或总文件大小统计进度,而单个大文件必须跟踪已复制的字节占总字节的比例,这也是上述代码的核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:32:10