我有一个名为" main.zip"的zip文件。在里面,我有另一个名为" meta"没有" .zip"延期。我想打开" meta"包含大量文本文件的zip文件。但是当我试图打开" meta" zip文件,我收到错误zipfile.BadZipfile: File is not a zip file
。以下是我的代码:
zf = zipfile.ZipFile(inputZipFile, 'r')
print(zf.namelist()) # [u'meta']
zf2 = zipfile.ZipFile(zf.open('meta')) # throws error
我无法提取和打开" meta"因为我想在没有写入磁盘的情况下完全在内存中执行此操作。
我的最终目标是修改其中一个文本文件并输出一个新的zip。
答案 0 :(得分:3)
如果您打算在内存中执行此操作,则需要创建一个类似文件的对象来调用zipfile.ZipFile
。虽然ZipFile.open
表示它会这样做,但实际上我会遇到同样的错误。
我已经开始工作的是使用ZipFile.read
阅读二进制文件并将其投放到io.BytesIO
信息流中。
import io
with zipfile.ZipFile("main.zip") as zf:
f2 = io.BytesIO(zf.read("meta"))
with zipfile.ZipFile(f2) as zf2:
# this is inside the inner zip file