Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:打开zip文件,扩展名不为";。zip";_Python_Zipfile - Fatal编程技术网

Python:打开zip文件,扩展名不为";。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

我有一个名为“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.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