如何使用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
相关产品推荐
相关产品推荐

