Python 3 Pigz 压缩目录并显示实时进度
以下是一个基于 Python 3 的代码,它可以实现自定义目录和输出目录,利用 pigz 压缩目录下文件和文件夹,并显示实时进度。
import os
import subprocess
import sys
def get_size(start_path='.'):
'获取目录大小'
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
return total_size
def compress_directory(input_dir, output_dir):
'压缩目录'
# 获取目录大小
dir_size = get_size(input_dir)
# 构造压缩命令
compress_command = ['pigz', '-r', input_dir, '-c', '-p', '4', '-k', '-q']
# 执行压缩命令
p = subprocess.Popen(compress_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 获取压缩后文件名
output_filename = os.path.basename(input_dir)
# 去掉文件名后缀
if '.' in output_filename:
output_filename = output_filename[:output_filename.rindex('.')]
output_filename += '.gz'
# 构造输出路径
output_path = os.path.join(output_dir, output_filename)
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
# 打开输出文件
with open(output_path, 'wb') as f:
# 读取压缩结果并写入输出文件
while True:
# 读取压缩结果
data = p.stdout.read(1024)
if not data:
break
# 写入输出文件
f.write(data)
# 显示进度
sys.stdout.write('
压缩进度:%.2f%%' % (f.tell() / dir_size * 100))
sys.stdout.flush()
# 输出压缩结果
print('
压缩完成:%s -> %s' % (input_dir, output_path))
if __name__ == '__main__':
# 自定义目录和输出目录
input_dir = '/path/to/input/directory'
output_dir = '/path/to/output/directory'
# 压缩目录
compress_directory(input_dir, output_dir)
使用方法:
- 将上述代码保存为
compress_directory.py文件。 - 使用文本编辑器打开
compress_directory.py文件,将/path/to/input/directory和/path/to/output/directory替换为实际的目录。 - 在终端中运行
python compress_directory.py命令来执行压缩任务。
原文地址: https://www.cveoy.top/t/topic/nDeM 著作权归作者所有。请勿转载和采集!