Python 压缩文件进度条:实时百分比显示

在 Python 中使用 tqdm 库可以方便地显示压缩文件的进度条。默认情况下,进度条会显示压缩速度,例如 '速度:{rate_fmt}'。本文将介绍如何将速度信息改为实时百分比显示。

问题:

默认的 rate_fmt 显示方式可能会导致进度条宽度不足,百分比显示不全。

解决方案:

可以使用 tqdmdynamic_ncols 参数动态调整进度条宽度,使百分比能够完整显示。

代码示例:

import os
import subprocess
from tqdm import tqdm


def pack_files(source_dir, output_dir):
    # 检查源目录和输出目录是否存在
    if not os.path.exists(source_dir) or not os.path.isdir(source_dir):
        print(f'源目录{source_dir}不存在或不是一个目录')
        return

    if not os.path.exists(output_dir) or not os.path.isdir(output_dir):
        print(f'输出目录{output_dir}不存在或不是一个目录')
        return

    # 计算文件总数
    total_files = sum([len(files) for root, dirs, files in os.walk(source_dir)])

    # 外层进度条(总进度)
    with tqdm(total=total_files,
              desc='压缩进度',
              bar_format='{desc}:{percentage:3.0f}%|�33[0m�33[32m{bar}�33[0m| [耗时:{elapsed} 速度:{rate_percent:.2f}%/s]',
              dynamic_ncols=True) as pbar:

        for root, dirs, files in os.walk(source_dir):
            for file in files:
                # 获取需要压缩的文件路径
                file_path = os.path.join(root, file)

                # 获取文件名和文件后缀
                file_name, file_ext = os.path.splitext(file)

                # 拼接输出文件路径(去掉文件后缀)
                output_file = os.path.join(output_dir, f'{file_name}.gz')

                if os.path.isdir(file_path):
                    # 处理文件夹,使用tar命令打包并压缩成tar.gz格式
                    tar_file = os.path.join(output_dir, f'{file_name}.tar.gz')
                    subprocess.run(['tar', '-czf', tar_file, file_path])
                    tqdm.write(f'已将文件夹{file_path}打包压缩到{tar_file}')
                else:
                    # 处理文件,使用pigz进行压缩
                    subprocess.run(['pigz', '-c', file_path],
                                   stdout=open(output_file, 'wb'))
                    tqdm.write(f'已将文件{file_path}压缩到{output_file}')

                # 更新外层进度条
                pbar.update(1)


# 路径
 source_dir = '/home/115/up'
 output_dir = '/home/115/app'
 pack_files(source_dir, output_dir)

代码解释:

  1. dynamic_ncols=True: 将 dynamic_ncols 设置为 True 可以让进度条自动调整宽度,以适应终端的大小,确保百分比能够完整显示。
  2. bar_format: 修改进度条的显示格式,将 rate_fmt 改为 rate_percent:.2f}%/s,显示实时百分比速度。

总结:

通过上述修改,可以将压缩文件进度条中的速度信息改为实时百分比显示,并使用 dynamic_ncols 参数动态调整进度条宽度,使百分比能够完整显示。

Python 压缩文件进度条:实时百分比显示

原文地址: https://www.cveoy.top/t/topic/nDeN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录