我正在尝试使用 Python 将存档压缩为最大大小(例如 1024mb)的“.zip”文件(或多个)。
我找到的唯一库是 gzip、shutil 和 zipfile,但我在其中找不到任何允许我以最大大小分割这些文件的选项。
我不想使用操作系统的功能,我想使用Python库来实现。这可能吗?
非常感谢。
你应该可以使用 zipfile 来做到这一点,但我还没有测试过。
创建一个 zipfile 对象列表,其中仅包含一个 zipfile 对象。 迭代要压缩的文件,将它们添加到列表中最新的 zip 文件中,然后检查新元素是否超出文件大小限制。如果是,请删除刚刚从zip文件中压缩的项目,然后将新的zip文件添加到zip文件列表中,并将刚刚删除的文件添加到列表中最新的zip文件对象中。
您需要使用 ZipInfo.compress_size 来找出压缩文件的大小。
from split_file_reader.split_file_writer import SplitFileWriter
import pathlib, math
file_path = '/var/example.mp4'
part_size = 1024 * 1024 * 1024, # 1024 mb
file = pathlib.Path(file_path)
part_count = math.ceil(file.stat().st_size / part_size)
width = len(str(part_count)) + 1
compressed_names = [file.stem+".zip."+str(i).zfill(width) for i in range(part_count)]
with SplitFileWriter(
max_part_size=part_size,
filenames=compressed_names
) as sfw:
with zipfile.ZipFile(file=sfw, mode='w') as zipf:
zipf.write(
file.absolute(),
file.name
)