精华内容
下载资源
问答
  • Python3实现zip分卷压缩过程解析
    2020-12-20 16:49:45

    使用zipfile库

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

    折腾经过

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

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

    如果想把单个大文件 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 库不支持创建分卷文件了〒▽〒

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

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    更多相关内容
  • 下面小编就为大家介绍一下WINRAR软件压缩文件的步骤。如果遇到上面小编说的情况,大家可以根据小编介绍的步骤进行文件的压缩。工具/原料 WINRAR软件 WinRAR它不像WinZip那样必须在软盘的支持下才可以使用这个功能....

    文件的传输是我们在平时的工作和生活中经常能遇到的,但是我们经常遇到这样的问题,无法传输整个文件夹或者在传输中文件过大,这个时候我们就需要将文件进行压缩。

    那么如何压缩文件呢?

    下面小编就为大家介绍一下WINRAR软件压缩文件的步骤。

    如果遇到上面小编说的情况,大家可以根据小编介绍的步骤进行文件的压缩。4c636568e7d44b7f6bdee07619eae96e.png

    工具/原料  WINRAR软件  WinRAR它不像WinZip那样必须在软盘的支持下才可以使用这个功能,WINRAR在制作的时候能够将某个大文件分卷压缩存放在任意指定的盘符中,所以这也大大的方便了我们的使用。c2fe3b514ab0fefbde2011d72e6f7e43.png

    步骤/方法  1、右击需要分卷压缩的文件或者是文件夹,在弹出的菜单中选择“添加到压缩文件...”选项。

    2、在弹出的设置窗口中,我们可以在“压缩包名称”对话框中确定文件存放的路径和名称,这时就可以将分卷压缩之后的文件存放在硬盘中的任何一个文件夹中。

    3、同时在“压缩方式”下拉列表中选择采用何种方式进行压缩,建议大家采用“最好”方式,这样能够让WinRAR最大程度的压缩文件。

    4、下部的压缩卷大小对话框可以设置每一个压缩包的个头大小。

    这就是我们要掌握的关键,先说说WinRAR默认的是1.44M软盘模式,不过你也可以定义压缩包大小。

    请记住默认单位是字节哟。

    要我们了解一下换算单位,1M=1024000字节。

    那么单个文件限制在1M的,这里就不能输入超过1024000了。

    5、根据实际需要选择存档选项,比如能够直接将文件保存为自解压方式的EXE文件、设置身份验证信息、压缩完毕后删除原先的文件等等。

    6、上面的设置完后,这样我们就可以得到以定义好的文件名为前缀,rar、r01、r02之类为后缀名的文件。610ba331f1cc1179f9918207c8ba097b.png

    压缩文件看起来步骤比较多,但是其实在使用中你会发现压缩文件非常简单。

    文件的压缩在工作和生活中的使用也是越来越多,不仅传输方便,而且压缩文件比较小,传输时间也比较短。

    另外小编要提醒大家的是,大家如果采用分卷压缩的话,一定要把所有的压缩文件放在同一个文件下,不要放在不同的文件夹。

    另外,不要丢失分卷,如果分卷丢失的话,将无法解压。

    展开全文
  • 下面小编就为大家介绍一下WINRAR软件压缩文件的步骤。如果遇到上面小编说的情况,大家可以根据小编介绍的步骤进行文件的压缩。工具/原料WINRAR软件WinRAR它不像WinZip那样必须在软盘的支持下才可以使用这个功能,WIN...

    文件的传输是我们在平时的工作和生活中经常能遇到的,但是我们经常遇到这样的问题,无法传输整个文件夹或者在传输中文件过大,这个时候我们就需要将文件进行压缩。那么如何压缩文件呢?下面小编就为大家介绍一下WINRAR软件压缩文件的步骤。如果遇到上面小编说的情况,大家可以根据小编介绍的步骤进行文件的压缩。a6a20123edc8f3d088d7ed1d8b202a73.png

    工具/原料

    WINRAR软件

    WinRAR它不像WinZip那样必须在软盘的支持下才可以使用这个功能,WINRAR在制作的时候能够将某个大文件分卷压缩存放在任意指定的盘符中,所以这也大大的方便了我们的使用。a6a20123edc8f3d088d7ed1d8b202a73.png

    步骤/方法

    1、右击需要分卷压缩的文件或者是文件夹,在弹出的菜单中选择“添加到压缩文件...”选项。

    2、在弹出的设置窗口中,我们可以在“压缩包名称”对话框中确定文件存放的路径和名称,这时就可以将分卷压缩之后的文件存放在硬盘中的任何一个文件夹中。

    3、同时在“压缩方式”下拉列表中选择采用何种方式进行压缩,建议大家采用“最好”方式,这样能够让WinRAR最大程度的压缩文件。

    4、下部的压缩卷大小对话框可以设置每一个压缩包的个头大小。这就是我们要掌握的关键,先说说WinRAR默认的是1.44M软盘模式,不过你也可以定义压缩包大小。请记住默认单位是字节哟。要我们了解一下换算单位,1M=1024000字节。那么单个文件限制在1M的,这里就不能输入超过1024000了。

    5、根据实际需要选择存档选项,比如能够直接将文件保存为自解压方式的EXE文件、设置身份验证信息、压缩完毕后删除原先的文件等等。

    6、上面的设置完后,这样我们就可以得到以定义好的文件名为前缀,rar、r01、r02之类为后缀名的文件。a6a20123edc8f3d088d7ed1d8b202a73.png

    压缩文件看起来步骤比较多,但是其实在使用中你会发现压缩文件非常简单。文件的压缩在工作和生活中的使用也是越来越多,不仅传输方便,而且压缩文件比较小,传输时间也比较短。另外小编要提醒大家的是,大家如果采用分卷压缩的话,一定要把所有的压缩文件放在同一个文件下,不要放在不同的文件夹。另外,不要丢失分卷,如果分卷丢失的话,将无法解压。

    展开全文
  • 现在一共有10个视频,一共313M,我对该文件夹进行分卷压缩,每个tar包100G,压缩过程如下: Windows 首先选中所有的压缩包,然后在压缩包上单击鼠标右键,然后选择7-Zip,再选择提取到当前位置,如下: 然后就...

    压缩

    现在一共有10个视频,一共313M,我对该文件夹进行分卷压缩,每个tar包100G,压缩过程如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Windows

    首先选中所有的压缩包,然后在压缩包上单击鼠标右键,然后选择7-Zip,再选择提取到当前位置,如下:
    在这里插入图片描述

    然后就解压成功了,如下:
    在这里插入图片描述

    Linux

    首先通过Xftp上传tar包到远程服务器,如下:
    在这里插入图片描述
    然后将所有tar包合并到一个tar包中,如下:
    在这里插入图片描述

    然后执行对tar包解压缩操作,如下:
    在这里插入图片描述

    展开全文
  • 我们上传东西的时候,由于文件过大而不能上传,或者不给上传,最明显的就是发邮件了,附件最大5M,有的...但是在linux下面有没有这样的方法了,linux下面有rar命令,有zip命令,windows下面这二种方式可以分割压缩,...
  • 7z解压软件(7-zip)分卷压缩怎么做?

    千次阅读 2020-12-22 23:33:51
    7z解压软件(7-zip)是一款开放源码的数据压缩程序...2.7zip软件是一款非常好用的压缩解压缩软件,用户可以通过软件解压多种格式的文件,十分方便,并且还支持分卷压缩,下面小编就教大家如何来制作一个分卷的压缩文件...
  • 我们网络环境中必然需要各类数据传输,如果数据过多,在接收的时候就比较困难,然而一个叫压缩软件的应用解决了这个问题。...分卷压缩操作步骤:1、使用鼠标右键点击将要被分卷压缩的文件,然后选择“添加到压缩文件...
  • Java之批量分卷压缩与解压缩实现

    千次阅读 2020-07-27 11:59:26
    主要介绍使用Zip4j进行文件批量分卷压缩和解压
  • 分卷压缩详解

    2022-02-22 14:20:52
    大部分主流压缩都支持分卷压缩了,常见的格式有:7z、ace、alz、bz2、gz、mou、rar、zip、zipx等。分卷压缩后必须从第一个分卷开始解压。 分卷压缩 大部分主流压缩都支持分卷压缩了,常见的格式有:7z、ace、alz...
  • 问题描述 有的数据集非常大,几百个G,存在...# 压缩,a表示压缩,-v1000m表示各分卷最大1G 7z a file.7z filename -v1000m # 解压,x表示解压,-r表示递归,-o表示解压到的位置 7z x -r file.7z.001 -o./data ...
  • Linux分卷压缩后,Windows解压缩

    千次阅读 2022-04-24 18:19:25
    参考 1、方法1参考linux 分卷压缩命令_傲雪星枫的博客-CSDN博客_linux分卷压缩 2、方法1参考Linux新手入门系列:Linux分卷压缩与分卷解压缩 - 墨天轮 3、方法2参考Windows中解压Linux中产生的tar.gz分卷压缩包...
  • 分卷压缩 tar cvzpf - myfile | split -d -b 50m - newfile # 其中 - myfile :输入文件夹名字; -b 50m :每卷为50m; - newfile :输出文件名 # 压缩完的文件命名为:newfile00,newfile01,newfile03... # 2.分卷文件...
  • .zip分卷解压方法

    万次阅读 2014-12-01 20:43:27
    下了几个分卷压缩的文件,假设后缀名为“*.zip.001”“*.zip.002”“*.zip.003”“*.zip.004”,需要合并成一个总文件*.zip,用WINRAR搞不定,装上WINZIP也搞不定,后来搜了一下,找到个办法(只在Windows下搞的):...
  • 下面针对这一问题,和小编一起来了解下具体使用BetterZip进行分卷压缩步骤。 第一步,找到我们需要进行分卷压缩的文件夹,选中后右键点击“显示简介”。进入显示简介页面后,显示该文件夹的信息、
  • WinRAR是很多电脑用户都在使用的一款文件压缩软件,今天,我们就一起来认识一下WinRAR的一个非常使用的功能:文件分卷压缩功能。那么,什么是文件分卷压缩功能,文件分卷压缩有什么用呢?文件分卷压缩有什么使用技巧...
  • 分卷压缩 tar cvzpf - myfile | split -d -b 50m - newfile # 其中 - myfile :输入文件夹名字; -b 50m :每卷为50m; - newfile :输出文件名 # 压缩完的文件命名为:newfile00,newfile01,newfile03... # 2.分卷...
  • Windows下解压分卷压缩方法

    千次阅读 2018-12-07 11:58:00
    360分卷压缩出来的文件的名字是*.zip.001、*.zip002 等等。 WinZip分卷压缩出来的文件名是*.zip、*.z01、*.z02 等等。 7z分卷压缩出来的文件名是*.001,*.002 等等。 操作步骤:①预处理: 文件重命名 ②...
  • Ubuntu下分卷压缩、合并解压

    千次阅读 2021-03-02 09:44:56
    1. 打包压缩文件 tar -zcvf imgs.tar.gz ./imgs #如果待压缩的文件夹中包含软链接或者硬链接,需要将其指向的文件(夹)也打包进去的话,需要加上参数-h,即 tar -zcvfh imgs.tar.gz ./imgs 注:如果只想打包,不想...
  • 压缩软件可谓是装机必备的软件了,然而你是否真的有选对压缩软件?很多朋友都会用到国产的一些...很多商业压缩软件往往使用了7-Zip这款开源软件的内核,来实现众多压缩文件的支持。而某些产品非但没有按照7-Zip所...
  • tar czf - train.zip | split -b 6000m - train.tar.gz #将训练集切分为大小为6000M的多个分卷 解压恢复:这里也用到了两个命令:cat和tar,分别实现分卷组合和解压缩。 cat train.tar.gz* | tar -xzv ...
  • 有的数据集非常大,几百个G,存在网盘里只能...# 压缩,a表示压缩,-v1000m表示各分卷最大1G 7z a file.7z filename -v1000m # 解压,x表示解压,-r表示递归,-o表示解压到的位置 7z x -r file.7z.001 -o./data ...
  • python实现压缩与解压

    2021-07-16 15:12:53
    文件压缩与解压一般分为三个步骤: 1.打开文件 2.添加/解压文件 3.关闭文件 一、zip文件压缩与解压 1、压缩 将原文件夹中的数据内容提取出来放到打开的zipfile中 import zipfile def make_zip(source_dir, ...
  • 1 概述在web项目中常见的一种...笔者今天分享将Excel导出后并压缩zip包响应到浏览器端,希望对大家有所帮助。2 实现思路使用AEAI DP创建样例工程export_demo,创建测试数据表employee,使用DP预置的样例功能快速创...
  • Linux压缩那些事

    2021-09-01 13:19:06
    本文主要介绍了Linux系统上常见的ZIP和RAR格式的压缩和解压操作,包括分卷压缩和分卷解压。
  • 解压zip,z01,z02

    千次阅读 2021-11-08 15:22:10
    在win系统上,直接解压后缀名为zip的文件,三个文件的内容都会解压至文件夹,不需要重复操作 若为linux系统需要先将三个文件合并 再对合并文件进行解压 cat data_object_velodyne* > v.zip unzip v.zip 先使用...
  • 步骤一、合并 cat UAV123.z01 UAV123.z02 UAV123.z03 UAV123.z04 UAV123.zip > full.zip (full.zip自定义的文件名) 步骤二、解压缩 uzip full.zip
  • 今天碰到一个问题就是一个文件大于4G的zip,想了很久后来还是采用这个开源软件7-zipmake && make install 安装步骤比较简单Usage: 7za [...] [...][]a: Add files to archiveb: Benchmarkd: Delete files ...
  • Java实现将文件或者文件夹压缩zip 最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类。但找了好多篇博客,总是发现有bug。因此就自己来写了个工具类。 这个工具类的功能为: (1)可以...
  • 如果你的文件很多,可以分成多个压缩包(注意是分开压缩,而不是分卷压缩) (2)在非Windows环境下将压缩包解压以后若所解压的程序的安装使用出现问题请认真检查程序的目录和文件权限 (3)程序只支持zip压缩包的解压 点此...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 712
精华内容 284
关键字:

zip分卷压缩的步骤