python使用DEFLATE 算法decode(‘ascii‘)编码打包的自定义格式的压缩包并未生成

问题描述:打包都为报错且打包的文件大小为0

打包程序:

import os
import zlib

def compress_folder_to_custom_format(input_folder, output_filename):
    """
    使用 DEFLATE 算法压缩文件夹下的所有文件,并保存为自定义文件包格式。

    Parameters:
        input_folder: str
            要压缩的文件夹路径。
        output_filename: str
            输出的自定义文件包名。
    """
    # 创建一个空的字节数组,用于存储所有文件的压缩数据和元数据
    compressed_data = bytearray()

    # 遍历文件夹下的所有文件
    for root, dirs, files in os.walk(input_folder):
        for file in files:
            # 构建文件的完整路径
            file_path = os.path.join(root, file)
            # 读取文件内容
            with open(file_path, 'rb') as f:
                data = f.read()
                # 使用 DEFLATE 算法压缩文件内容
                compressed_data += zlib.compress(data)
                # 添加文件名作为元数据
                compressed_data += file.encode('ascii') + b'\n'  # 文件名

    # 将所有文件的压缩数据和元数据写入到输出文件中
    with open(output_filename, 'wb') as f_out:
        f_out.write(compressed_data)

# 指定要压缩的文件夹路径和输出文件名
input_folder = 'example_folder'
output_filename = 'package.pg'

# 执行压缩操作
compress_folder_to_custom_format(input_folder, output_filename)

解压程序:

import zlib
import os

def decompress_custom_format(input_filename, output_folder):
    """
    解压使用 DEFLATE 算法使用 decode('ascii') 编码的自定义格式的压缩包。

    Parameters:
        input_filename: str
            压缩包文件名。
        output_folder: str
            解压后的输出文件夹路径。
    """
    # 读取压缩包文件内容
    with open("./" + input_filename, 'rb') as f:
        # 读取压缩包的数据
        compressed_data = f.read()

    # 解析压缩包数据和元数据
    file_index = 0
    while file_index < len(compressed_data):
        # 找到下一个文件的文件名
        next_file_name_end = compressed_data.find(b'\n', file_index)
        if next_file_name_end == -1:
            break
        file_name = compressed_data[file_index:next_file_name_end].decode('ascii')
        file_index = next_file_name_end + 1

        # 提取压缩数据
        next_file_data_end = compressed_data.find(b'\n', file_index)
        if next_file_data_end == -1:
            break
        file_data = compressed_data[file_index:next_file_data_end]
        file_index = next_file_data_end + 1

        # 使用 zlib 解压缩数据
        decompressed_data = zlib.decompress(file_data)

        # 将解压后的数据写入到输出文件夹中
        output_filepath = os.path.join(output_folder, file_name)
        with open(output_filepath, 'wb') as f_out:
            f_out.write(decompressed_data)

# 压缩包文件名
input_filename = 'package.pg'
# 解压后的输出文件夹路径
output_folder = './packageun'

# 解压压缩包
decompress_custom_format(input_filename, output_folder)

相关推荐

  1. 定义设计与实现

    2024-03-11 13:40:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 13:40:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 13:40:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 13:40:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 13:40:02       20 阅读

热门阅读

  1. linux系统 QT 处理键盘Ctrl+C信号

    2024-03-11 13:40:02       19 阅读
  2. 举例说明计算机视觉(CV)技术的优势和挑战。

    2024-03-11 13:40:02       24 阅读
  3. Ubuntu系统开发环境搭建和常用软件

    2024-03-11 13:40:02       16 阅读
  4. Unity3D 基于AStar地图的摇杆控制角色详解

    2024-03-11 13:40:02       20 阅读
  5. Debian系APT源通用镜像加速配置

    2024-03-11 13:40:02       21 阅读
  6. NLP技术

    2024-03-11 13:40:02       22 阅读
  7. Go语言聊天室demo

    2024-03-11 13:40:02       19 阅读
  8. 【golang】二叉树的遍历

    2024-03-11 13:40:02       22 阅读
  9. Go语法之函数 defer使用

    2024-03-11 13:40:02       20 阅读
  10. 大数据开发(Hadoop面试真题-卷六)

    2024-03-11 13:40:02       24 阅读
  11. Node.js概述与安装和运行

    2024-03-11 13:40:02       20 阅读
  12. springboot文件上传

    2024-03-11 13:40:02       20 阅读