python: abrir um ficheiro do zip sem o extrair temporariamente

Como posso abrir arquivos de um arquivo zip sem extraí-los primeiro?

Estou a usar o pygame. Para salvar o espaço em disco, tenho todas as imagens fechadas. É possível carregar uma determinada imagem diretamente do arquivo zip? Por exemplo: pygame.image.load('zipFile/img_01')

Author: Kirby, 2013-10-15

3 answers

A resposta de Vincent Povirk não funcionará completamente.
import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgfile = archive.open('img_01.png')
...

Tens de o mudar em:

import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgdata = archive.read('img_01.png')
...
Para mais detalhes, leia os documentos do ZipFile.
 54
Author: Jellema, 2018-02-16 02:41:09
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)
Eu estava a tentar descobrir isto por mim mesmo e pensei que isto poderia ser útil para qualquer um que se depare com esta questão no futuro.
 11
Author: Brandon, 2014-01-27 17:26:02
Em teoria, sim, É só uma questão de ligar as coisas. O Zipfile pode lhe dar um objeto como arquivo para um arquivo em um arquivo zip, e imagem.o load irá aceitar um objecto semelhante ao ficheiro. Então algo assim deve funcionar.
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()
 3
Author: Vincent Povirk, 2013-10-15 01:36:27