当前位置:首页 > 数码 >

winrar怎么做分卷压缩(winrar怎么批量压缩文件夹)

来源:原点资讯(www.yd166.com)时间:2024-05-07 21:45:46作者:YD166手机阅读>>

这篇文章主要介绍了Python3实现zip分卷压缩过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用zipfile库

查看 官方中文文档

利用 Python 压缩 ZIP 文件,我们第一反应是使用 zipfile 库,然而,它的官方文档中却明确标注“此模块目前不能处理分卷 ZIP 文件”,(⊙﹏⊙)

折腾经过

翻遍了Google、CSDN、Stackoverflow等平台均未找到解决方案,最靠谱的是调用外部解压程序实现分卷压缩的功能。但是,如何不依靠外部程序实现这个功能呢??

于是乎,只能自己慢慢造轮子。看着 ZIP 格式开发商留下的文档 ZIP File Format Specification,头疼啊(;´д`)。于是我拿着 WinHex 开始16进制一个一个文件对比 WinRar 创建的分卷压缩和单个 zip 文件的差异。最后还真的整出来了( ̄▽ ̄)"

winrar怎么做分卷压缩,winrar怎么批量压缩文件夹(1)

如果想把单个大文件 test.zip -> 分卷文件 test.z01、test.z02、test.zip

首先,在创建的第一个分卷文件 test.z01的前面加上 \x50\x4b\x07\x08 这个是分卷压缩的文件头(header),占4个字节。其实单个压缩文件本身 header 就有这个了,而分卷压缩的需要两个emmm。之后便是从单个大压缩文件文件test.zip中读取 "一个分卷大小 -4 个字节"的数据,写入test.z01中,如何接着读取一个分卷大小的数据,写入test.z02,以此类推,最后一个分卷文件名也是test.zip。

Python3的代码实现

import os import zipfile def zip_by_volume(file_path, block_size): """zip文件分卷压缩""" file_size = os.path.getsize(file_path) # 文件字节数 path, file_name = os.path.split(file_path) # 除去文件名以外的path,文件名 suffix = file_name.split('.')[-1] # 文件后缀名 # 添加到临时压缩文件 zip_file = file_path '.zip' with zipfile.ZipFile(zip_file, 'w') as zf: zf.write(file_path, arcname=file_name) # 小于分卷尺寸则直接返回压缩文件路径 if file_size <= block_size: return zip_file else: fp = open(zip_file, 'rb') count = file_size // block_size 1 # 创建分卷压缩文件的保存路径 save_dir = path os.sep file_name '_split' if os.path.exists(save_dir): from shutil import rmtree rmtree(save_dir) os.mkdir(save_dir) # 拆分压缩包为分卷文件 for i in range(1, count 1): _suffix = 'z{:0>2}'.format(i) if i != count else 'zip' name = save_dir os.sep file_name.replace(str(suffix), _suffix) f = open(name, 'wb ') if i == 1: f.write(b'\x50\x4b\x07\x08') # 添加分卷压缩header(4字节) f.write(fp.read(block_size - 4)) else: f.write(fp.read(block_size)) fp.close() os.remove(zip_file) # 删除临时的 zip 文件 return save_dir if __name__ == '__main__': file = r"D:\Downloads\1.mp4" # 原始文件 volume_size = 1024 * 1024 * 100 # 分卷大小 100MB path = zip_by_volume(file, volume_size) print(path) # 输出分卷压缩文件的路径

缺点

该方法创建分卷压缩的时候,需要先在磁盘创建一个临时压缩包,然后将其拆分,实际上会对磁盘写入两次,这就浪费了时间。

当然,我尝试使用 ByteIO 进行字节流的压缩,但是这种方式需要先把文件读入内存,对于超级大的文件,这是不现实的,分分钟内存爆炸。

然后,我尝试使用 io.pipe 的管道来处理,而 zipfile 压缩需要提供一个 file 或 file-like 对象,这个对象必须实现 seek() 和 tell() 方法来回去写入文件头信息,然而管道流没办法seek回去修改数据。这里,参考了Python zipfile os.pipe()探索记,屏蔽了 seek() 和 tell() 函数。但是,后面我分卷时需要指定读取的字节数,这就需要这两个函数。。。我大概知道为什么 zipfile 库不支持创建分卷文件了〒▽〒

这个库的作者也没少掉头发。。。现在就将就一下,这样用着吧。。。

以上就是本文的全部内容,觉得文章还不错的话不妨收藏起来慢慢看,有任何建议或看法欢迎大家在评论区分享讨论!

我是一名python开发工程师,整理了一套python的学习资料,如果你想提升自己,对编程感兴趣,关注我并在后台私信小编:“08”即可免费领取资料!希望对你能有所帮助!

栏目热文

winrar分卷压缩后怎么解压(winrar下载后只有压缩没有解压)

winrar分卷压缩后怎么解压(winrar下载后只有压缩没有解压)

在C#中压缩文件后,如果你想确保用户可以使用WinRAR(或其他任何压缩软件)来解压这个文件,你应该创建一个标准的压缩格...

2024-05-07 22:04:46查看全文 >>

winrar怎么解压分卷文件(winrar分卷压缩包怎么解压)

winrar怎么解压分卷文件(winrar分卷压缩包怎么解压)

说到解压和压缩,很多朋友想到的是WinZIP和WinRAR,不过这两款可是收费软件(WinRAR也有免费版,但是内置烦...

2024-05-07 22:06:09查看全文 >>

winrar无损压缩教程(winrar压缩文件夹教程)

winrar无损压缩教程(winrar压缩文件夹教程)

很多朋友在处理视频的时候都会遇到视频过大的问题,想要压缩视频的同时不影响画质,简单的方法有两种。一种是用专业的压缩软件,...

2024-05-07 21:28:28查看全文 >>

winrar如何分片压缩(winrar如何压缩视频教程)

winrar如何分片压缩(winrar如何压缩视频教程)

工作或生活中,我们经常会遇到大文件上传的问题。由于平台的限制,我们在上传文件时有时就会遇到单文件大小超过平台规定而不能上...

2024-05-07 21:29:52查看全文 >>

winrar分成四个分卷如何压缩(winrar怎么批量压缩文件夹)

winrar分成四个分卷如何压缩(winrar怎么批量压缩文件夹)

WinRAR是一款功能强大的文件压缩解压缩工具,支持目前绝大多数的压缩文件格式,包含强力压缩、分卷、加密和自解压模块,简...

2024-05-07 22:05:21查看全文 >>

智能家居十大常见定义(简述智能家居定义和特点)

智能家居十大常见定义(简述智能家居定义和特点)

1. **基本定义**:“智能家居是通过互联网连接的设备和系统组成的,它们可以远程监控、管理和控制家中各种功能,如照明、...

2024-05-07 21:44:42查看全文 >>

智能家居分类图解(智能家居都有哪些种类)

智能家居分类图解(智能家居都有哪些种类)

我们一直都在说智能家居,智能产品,但是智能家居产品到底是什么呢?智能家居产品是怎么分类的呢?到底什么是智能家居产品呢?为...

2024-05-07 21:40:32查看全文 >>

智能家居标准的分类(智能家居类型一览表)

智能家居标准的分类(智能家居类型一览表)

记者今天了解到,近日,市场监管总局(国家标准委)批准发布一批重要国家标准,涉及生产生活、绿色可持续等多个领域。▶智能家具...

2024-05-07 21:53:37查看全文 >>

智能家居的四大类型(智能家居的四大类型是)

智能家居的四大类型(智能家居的四大类型是)

有线智能和无线智能是智能家居技术中的两种主要连接方式,它们各有特点和适用场景。让我们来看看它们之间的主要区别: 有线智能...

2024-05-07 22:12:15查看全文 >>

智能家居都包括什么(智能家居都有哪些方面的)

智能家居都包括什么(智能家居都有哪些方面的)

智能家居是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,...

2024-05-07 22:09:34查看全文 >>

文档排行