Python代码可在zip文件中递归地创建一个zip文件,以进行“ n”次迭代

时间:2018-06-29 06:20:15

标签: python zip

我正在尝试(但失败)创建一个Python函数,该函数本质上会压缩一些文本,然后一次又一次地压缩档案(基于参数的数字)。

因此,我们最终得到包含file2.zip的file1.zip,而后者又包含file3.zip。即(file1.zip(file2.zip(file3.zip)))。希望表达得足够好。

T

上面的代码是我到目前为止所拥有的,它不是很正确,它创建了1个压缩文件,其中3个文件全部处于同一级别,而不是相互之间。我认为这是一个递归问题。

我也可能想对gzip,rar等进行相同的操作-只是说如果效果对我有帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

我认为您是对的,这是递归任务。

为此,我从仅写一个(-另一个zip-)文件的zip文件的代码中分离了使用数据创建zip文件的代码。
此外,用于将真实文件实际写入磁盘(不仅是BytesIO对象)的代码应该甚至在函数之外,因为作为递归函数,它完全是循环的一部分。

import io
import zipfile

hexdata = "5a69702054657374"


def zip_it(filename, depth):

    zip_buffer = io.BytesIO()

    with zipfile.ZipFile(zip_buffer, "a", zipfile.ZIP_DEFLATED, False) as zip_file:
        if depth > 0:
            content = zip_it(filename, depth - 1)
            fname = 'testZipFile'
            depth = str(depth)
            ext = '.zip'
        else:
            content = bytes.fromhex(hexdata).decode("utf-8")
            fname = 'myTextfile'
            depth = ''
            ext = '.txt'
        zip_file.writestr(fname + depth + ext, content)

    return zip_buffer.getvalue()


if __name__ == '__main__':
    with open("testfile" + ".zip", "wb") as f:
        f.write(zip_it("testfile", 3))

您当然可以将其放在另一个函数中,例如write_zip(filename)会调用zip_it,但这取决于项目的风格或结构。