首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用python中的ZipFile库在ZipFile中存储zipfile

如何使用python中的ZipFile库在ZipFile中存储zipfile
EN

Stack Overflow用户
提问于 2020-05-29 23:22:40
回答 1查看 32关注 0票数 0

我想在ZipFile中存储一个ZipFile,当我使用.write方法来编写ZipFile对象时,我得到了一个错误:“预期的字符串、字节或os.PathLike对象,而不是ZipFile”。

代码语言:javascript
运行
复制
>>> from io import StringIO
>>> import zipfile
>>> child_zip = zipfile.ZipFile(StringIO(), 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True)
>>> parent_zip = zipfile.ZipFile(zipfile.ZipFile, 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True)
>>> parent_zip.write("test.zip",child_zip)
EN

回答 1

Stack Overflow用户

发布于 2020-05-29 23:41:15

首先:

ZipFile.write方法需要一个文件名作为其第一个参数,然后它将打开该文件并从该文件中读取数据,将其写入存档。您需要使用writestr方法将原始数据写入parent_zip

第二:

您将像这样创建parent_zip

代码语言:javascript
运行
复制
parent_zip = zipfile.ZipFile(zipfile.ZipFile, 'w',
                             compression=zipfile.ZIP_DEFLATED, allowZip64=True)

但是zipfile.ZipFile的第一个参数应该是“文件的路径,或者一个类似文件的对象”。你正在通过一个类,这没有任何意义。如果想要创建一个内存中的压缩文件,可以传入另一个StringIO实例,也可以提供一个文件名。

第三:

您不能将child_zip对象本身写入文件;您需要提供某种类型的字节流。换句话说,您需要提供组成child_zip存档的字节数。

把所有这些放在一起:

代码语言:javascript
运行
复制
>>> import io
>>> import zipfile
>>> child_zip_data = io.BytesIO()
>>> child_zip = zipfile.ZipFile(child_zip_data, 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True)
>>> child_zip.close()
>>> parent_zip = zipfile.ZipFile("parent.zip", 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True)
>>> parent_zip.writestr("test.zip", child_zip_data.getvalue())
>>> parent_zip.close()

这将创建一个名为parent.zip的新归档文件,其中包含一个名为test.zip的归档成员

代码语言:javascript
运行
复制
$ unzip -l parent.zip
Archive:  parent.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       22  05-29-2020 11:45   test.zip
---------                     -------
       22                     1 file

如果我们提取test.zip,我们会发现它是一个空的压缩文件:

代码语言:javascript
运行
复制
$ unzip parent.zip
Archive:  parent.zip
  inflating: test.zip
$ unzip -l test.zip
Archive:  test.zip
warning [test.zip]:  zipfile is empty
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62089350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档