问题描述:打包都为报错且打包的文件大小为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)