Python代码,用于在';n';迭代
我正在尝试(但失败)创建一个Python函数,该函数本质上是对一些文本进行压缩,然后一次又一次地压缩归档文件(基于参数的数字) 因此,我们最终得到的file1.zip包含file2.zip,而file2.zip又包含file3.zip。i、 e(file1.zip(file2.zip(file3.zip)))。希望这一点表达得足够清楚Python代码,用于在';n';迭代,python,zip,Python,Zip,我正在尝试(但失败)创建一个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(f
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-)文件的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\u-zip(filename)
,它调用zip\u-it
,但这是一个关于你的项目的品味或结构的问题。应该提到的是,我想通过一次对磁盘的写入在内存中完成这一切是的,这就完成了这个技巧-非常感谢。为了保持与内部.zip文件的一致性,我添加了'zip_file.writestr(filename+str(depth)+“.zip”,content')。现在我需要确保第一个文件(我正在压缩的实际文本)没有.zip扩展名。再次感谢