Python:打开zip文件,扩展名不为";。zip";
我有一个名为“main.zip”的zip文件。在这里面,我有另一个名为“meta”的zip,它没有“.zip”扩展名。我想打开包含大量文本文件的“meta”zip文件。但是,当我试图打开“meta”zip文件时,我得到一个错误,即Python:打开zip文件,扩展名不为";。zip";,python,zipfile,Python,Zipfile,我有一个名为“main.zip”的zip文件。在这里面,我有另一个名为“meta”的zip,它没有“.zip”扩展名。我想打开包含大量文本文件的“meta”zip文件。但是,当我试图打开“meta”zip文件时,我得到一个错误,即zipfile.BadZipfile:file不是zip文件。下面是我的代码: zf = zipfile.ZipFile(inputZipFile, 'r') print(zf.namelist()) # [u'meta'] zf2 = zipfile.ZipFi
zipfile.BadZipfile:file不是zip文件
。下面是我的代码:
zf = zipfile.ZipFile(inputZipFile, 'r')
print(zf.namelist()) # [u'meta']
zf2 = zipfile.ZipFile(zf.open('meta')) # throws error
我无法提取并打开“meta”,因为我想完全在内存中执行此操作,而无需写入磁盘
我的最终目标是修改其中一个文本文件并输出一个新的zip。如果您打算在内存中执行此操作,则需要创建一个类似文件的对象来调用
zipfile.zipfile
。虽然说它可以做到这一点,但实际上我得到的错误与你的相同
我要做的是读取二进制文件并将其放入流中
那么
tempfile
呢?它只是扩展名,还是meta
可能已损坏?比较是否使用扩展名打开zip文件。发生了什么事?@Prune我试着用.zip打开meta
,结果打开得非常完美。而且它没有被接受。我需要按原样打开它,因为我从其他地方获得了该文件。扩展名不是这里的问题,您正在将一个ZipExtFile
传递给zipfile.zipfile
@JaredGoguen,但根据应该可以使用的文档ZipFile.open
生成一个“类似于二进制文件的对象”,这正是ZipFile.ZipFile
所期望的。我在下面提出了一个解决方案作为答案,效果非常好。说真的,几个小时以来我一直在用StringIO
尝试类似的东西,但都没用<代码>字节IO完成了任务。谢谢你嗨@ParthBhoiwala!我的处境和你的一样。我只需要从meta中提取文件,就这样。我无法提取meta中的文件。你能帮忙吗?
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