我正在尝试(但失败)创建一个Python函数,该函数本质上会压缩一些文本,然后一次又一次地压缩档案(基于参数的数字)。
因此,我们最终得到包含file2.zip的file1.zip,而后者又包含file3.zip。即(file1.zip(file2.zip(file3.zip)))。希望表达得足够好。
T
上面的代码是我到目前为止所拥有的,它不是很正确,它创建了1个压缩文件,其中3个文件全部处于同一级别,而不是相互之间。我认为这是一个递归问题。
我也可能想对gzip,rar等进行相同的操作-只是说如果效果对我有帮助。
谢谢
答案 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
,但这取决于项目的风格或结构。