如果我在Python字符串中有zip文件内容,能否不写入文件解压?
我写了一些Python代码,用来从网上获取一个zip文件,并把它放进一个字符串里:
In [1]: zip_contents[0:5]
Out[1]: 'PK\x03\x04\x14'
我发现有一个叫zipfile的库,但我找不到一个可以直接接受一堆原始zip数据的函数。它似乎只想从文件里读取。
我真的需要把这个数据先放到一个临时文件里吗,还是说有其他办法可以解决这个问题?
3 个回答
0
这个问题已经有点时间了,自从被接受的答案以来,Python有了一些变化。
cStringIO这个库在Python 3.0之后改了名字(更多细节可以查看 这个链接)。
你可以试试下面的代码:
import io
import zipfile
fp = io.StringIO('PK\x03\x04\x14') # or io.BytesIO if you have a Bytes object
zfp = zipfile.ZipFile(fp, "r")
zfp.extractall("./extract_folder") # extract zip in a `extract_folder` folder
6
把你的字符串放在一个 cStringIO 对象里。这个东西看起来、使用起来和文件对象很像,但它其实是在内存里运行的。
33
zipfile.ZipFile 可以接受任何像文件一样的对象:
class zipfile.ZipFile(file, …)
打开一个 ZIP 文件,这里的 file 可以是一个 文件路径(字符串形式),也可以是一个 像文件的对象,或者是一个类似路径的对象。
所以你可以使用 BytesIO (3.x) 或者 StringIO (2.x):
# Modern Python 3.x
from io import BytesIO
import zipfile
fp = BytesIO(b'PK\x03\x04\x14')
zfp = zipfile.ZipFile(fp, "r")
# Legacy Python 2.x
try:
from cStringIO import StringIO
except:
from StringIO import StringIO
import zipfile
fp = StringIO('PK\x03\x04\x14')
zfp = zipfile.ZipFile(fp, "r")