python3中zip分卷压缩代码

>> 饿了么、美团外卖红包领取地址<<

搜了很多资料,基本都是下方这一版代码

import os
import zipfile
def zip_by_volume(file_path, save_dir, block_size):
    """zip文件分卷压缩"""
    block_size = block_size * 1024 * 1024
    # 文件字节数
    file_size = os.path.getsize(file_path)
    # 除去文件名以外的path,文件名
    path, file_name = os.path.split(file_path)
    # 文件后缀名
    suffix = file_name.split('.')[-1]
    # 添加到临时压缩文件
    zip_file = save_dir + file_name + '.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
        # 拆分压缩包为分卷文件
        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:
                # 添加分卷压缩header(4字节)
                f.write(b'\x50\x4b\x07\x08')
                f.write(fp.read(block_size - 4))
            else:
                f.write(fp.read(block_size))
        fp.close()
        # 删除临时的 zip 文件
        os.remove(zip_file)
        return save_dir

if __name__ == '__main__':
    path = zip_by_volume(r"/Users/lqc/Desktop/test.dmg", r"/Users/lqc/Desktop/test/", 100)
    print(path)

可以参考代码注释进行简单的调整改动,目前代码分卷压缩的block_size单位为M,不过在mac下看压缩出来的文件大小显示总会大一点,可能是系统的原因。


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍

彩虹烘鞋器可伸缩快速干鞋机家用旅行便携式烤鞋暖鞋器成人儿童安全烘干器鞋靴除湿机 伸缩款Q8103
¥46.00
成人本科学士学位英语统一考试星级词汇大冲关(第2版 乱序版)
¥18.09
卫龙魔芋爽600g香辣素毛肚休闲零食大礼包情人节送女友生日礼物辣条
¥35.90
励展(LIZHAN)医用外科口罩一次性成人防护三层医疗正品透气轻薄防尘50只/盒 蓝色非独立
¥19.80
清濮上品 四川春见耙耙柑 4.5-5斤75-85mm 新鲜柑橘水果丑橘子 年货送礼
¥38.90
内廷上用灰甲灵冷敷凝胶足部肿胀疼痛灰指甲足痒足癣足臭甲癣
¥49.80
瓦力【抗蓝光】荣耀80pro钢化膜荣耀80pro手机膜 曲面防摔耐磨保护手机贴膜
¥41.80
手护佳 一次性食品级丁腈手套 厨房家用公司复工学生开学劳保防护 盒装100只蓝色 L号
¥47.30