python: ouvrir le fichier à partir de zip sans l'extraire Temporairement

Comment puis-je ouvrir des fichiers à partir d'une archive zip sans les extraire en premier?

j'utilise pygame. Pour économiser de l'espace disque, j'ai toutes les images zippée. Est-il possible de charger une image directement à partir du fichier zip? Exemple: pygame.image.load('zipFile/img_01')

40
demandé sur Kirby 2013-10-15 05:23:17

3 réponses

la réponse de Vincent Povirk ne fonctionnera pas complètement;

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

Vous devez modifier dans:

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

pour plus de détails lire le ZipFile docs ici

54
répondu 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)

j'essayais de comprendre cela par moi-même tout à l'heure et j'ai pensé que cela pourrait être utile à quiconque rencontrerait cette question à l'avenir.

11
répondu Brandon 2014-01-27 17:26:02

En théorie, oui, c'est juste une question de brancher le tout. Zipfile peut vous donner un objet semblable à un fichier pour un fichier dans une archive zip, et une image.la charge d'accepter un fichier objet semblable. Donc quelque chose comme ça devrait marcher:

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
répondu Vincent Povirk 2013-10-15 01:36:27