txt ordenar operaciones importar guardar extraer exportar datos con como cargar archivos archivo abrir python memory zip zipfile stringio

python - ordenar - Extrayendo un archivo zip en la memoria?



importar archivo txt a python (3)

Razones probables:

1. Este módulo actualmente no maneja archivos ZIP de varios discos. (O)
2.Compruebe con StringIO.getvalue () el clima del error Unicode se acerca.

¿Cómo extraigo un zip en la memoria?

Mi intento (devolver None en .getvalue() ):

from zipfile import ZipFile from StringIO import StringIO def extract_zip(input_zip): return StringIO(ZipFile(input_zip).extractall())


Trabajando frecuentemente con archivos, recomendaría hacer una herramienta para trabajar cómodamente con archivos en memoria. Algo como esto:

import zipfile import StringIO class InMemoryZip(object): def __init__(self): # Create the in-memory file-like object for working w/imz self.in_memory_zip = StringIO.StringIO() # Just zip it, zip it def append(self, filename_in_zip, file_contents): # Appends a file with name filename_in_zip and contents of # file_contents to the in-memory zip. # Get a handle to the in-memory zip in append mode zf = zipfile.ZipFile(self.in_memory_zip, "a", zipfile.ZIP_DEFLATED, False) # Write the file to the in-memory zip zf.writestr(filename_in_zip, file_contents) # Mark the files as having been created on Windows so that # Unix permissions are not inferred as 0000 for zfile in zf.filelist: zfile.create_system = 0 return self def read(self): # Returns a string with the contents of the in-memory zip. self.in_memory_zip.seek(0) return self.in_memory_zip.read() # Zip it, zip it, zip it def writetofile(self, filename): # Writes the in-memory zip to a file. f = file(filename, "wb") f.write(self.read()) f.close() if __name__ == "__main__": # Run a test imz = InMemoryZip() imz.append("testfile.txt", "Make a test").append("testfile2.txt", "And another one") imz.writetofile("testfile.zip")

Funciona de maravilla


extractall extrae al sistema de archivos para que no obtenga lo que desea. Para extraer un archivo en la memoria, use el método de read .

Si realmente necesita todo el contenido en la memoria, podría hacer algo como:

def extract_zip(input_zip): input_zip=ZipFile(input_zip) return {name: input_zip.read(name) for name in input_zip.namelist()}