我正在尝试(但失败了)创建一个Python函数,该函数基本上是压缩一些文本,然后一次又一次地压缩归档文件(基于参数的数字)。你知道吗
所以我们最终得到的file1.zip包含file2.zip,而file2.zip又包含file3.zip。i、 e(file1.zip(file2.zip(file3.zip)))。希望你说得够清楚。你知道吗
import io
import zipfile
import gzip
hexdata = "5a69702054657374"
def zip_it(filename, depth):
zip_buffer = io.BytesIO()
for i in range(0, depth):
with zipfile.ZipFile(zip_buffer, "a", zipfile.ZIP_DEFLATED, False) as zip_file:
zip_file.writestr(filename + str(i), bytes.fromhex(hexdata).decode("utf-8"))
with open(filename + ".zip", "wb") as f:
f.write(zip_buffer.getvalue())
if __name__ == '__main__':
zip_it("testfile", 3)
上面的代码是我到目前为止所拥有的,它不太正确,它创建了一个压缩文件,其中3个文件都在同一级别,而不是在彼此之间。我想这是一个递归问题。你知道吗
另外,我可能也想对gzip、rar等做同样的处理——只是说万一我得到任何帮助的话。你知道吗
谢谢
我认为你是对的,这是一个递归的任务。你知道吗
为此,我将创建一个包含数据的zip文件的代码与只编写一个(另一个zip)文件的zipfile的代码分开。
此外,用于将实际文件(不仅仅是BytesIO对象)写入磁盘的代码甚至应该在函数之外,因为作为递归函数,它完全是循环的一部分。你知道吗
当然,您可以将其放在另一个函数中,例如
write_zip(filename)
,它调用zip_it
,但这取决于您的项目的品味或结构。你知道吗相关问题 更多 >
编程相关推荐