python:从zip打开文件而不临时解压缩

时间:2013-10-15 01:23:18

标签: python zipfile

如何从zip存档中打开文件而不先提取它们?

我正在使用pygame。为了节省磁盘空间,我将所有图像都压缩了。 是否可以直接从zip文件加载给定的图像?例如: pygame.image.load('zipFile/img_01')

3 个答案:

答案 0 :(得分:69)

Vincent Povirk的答案不会完全奏效;

import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgfile = archive.open('img_01.png')
...

您必须在以下位置进行更改:

import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgdata = archive.read('img_01.png')
...

有关详细信息,请阅读ZipFile文档here

答案 1 :(得分:15)

import io, pygame, zipfile
archive = zipfile.ZipFile('images.zip', 'r')

# read bytes from archive
img_data = archive.read('img_01.png')

# create a pygame-compatible file-like object from the bytes
bytes_io = io.BytesIO(img_data)

img = pygame.image.load(bytes_io)

我现在正试图为自己解决这个问题,并认为这可能对将来遇到这个问题的人有用。

答案 2 :(得分:5)

理论上,是的,这只是插件的问题.Zipfile可以为zip档案中的文件提供类似文件的对象,而image.load将接受类似文件的对象。所以这样的事情应该有效:

import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgfile = archive.open('img_01.png')
try:
    image = pygame.image.load(imgfile, 'img_01.png')
finally:
    imgfile.close()
相关问题