¿Cómo puedo abrir archivos en un archivo zip sin extraerlos primero?
Estoy usando pygame. Para ahorrar espacio en disco, tengo todas las imágenes comprimidas. ¿Es posible cargar una imagen determinada directamente desde el archivo zip? Por ejemplo:
pygame.image.load('zipFile/img_01')
Respuestas:
La respuesta de Vincent Povirk no funcionará por completo;
import zipfile archive = zipfile.ZipFile('images.zip', 'r') imgfile = archive.open('img_01.png') ...
Tienes que cambiarlo en:
import zipfile archive = zipfile.ZipFile('images.zip', 'r') imgdata = archive.read('img_01.png') ...
Para obtener más información, lea los
ZipFile
documentos aquí .fuente
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)
Estaba tratando de resolver esto por mí mismo hace un momento y pensé que esto podría ser útil para cualquiera que se encuentre con esta pregunta en el futuro.
fuente
En teoría, sí, es solo una cuestión de conectar cosas. Zipfile puede darle un objeto similar a un archivo para un archivo en un archivo zip, e image.load aceptará un objeto similar a un archivo. Entonces, algo como esto debería 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()
fuente