¿Cómo leo archivos seleccionados de un archivo Zip remoto a través de HTTP usando Python?

StackOverflow https://stackoverflow.com/questions/94490

  •  01-07-2019
  •  | 
  •  

Pregunta

Necesito leer archivos seleccionados, que coincidan con el nombre del archivo, desde un archivo zip remoto usando Python.No quiero guardar el zip completo en un archivo temporal (no es tan grande, por lo que puedo manejar todo lo que hay en la memoria).

Ya escribí el código y funciona, y estoy respondiendo esto yo mismo para poder buscarlo más tarde.Pero como la evidencia sugiere que soy uno de los participantes más tontos en Stackoverflow, estoy seguro de que hay margen de mejora.

¿Fue útil?

Solución

Así es como lo hice (tomando todos los archivos que terminan en ".ranks"):

import urllib2, cStringIO, zipfile

try:
    remotezip = urllib2.urlopen(url)
    zipinmemory = cStringIO.StringIO(remotezip.read())
    zip = zipfile.ZipFile(zipinmemory)
    for fn in zip.namelist():
        if fn.endswith(".ranks"):
            ranks_data = zip.read(fn)
            for line in ranks_data.split("\n"):
                # do something with each line
except urllib2.HTTPError:
    # handle exception

Otros consejos

Gracias Marcel por tu pregunta y respuesta (tuve el mismo problema en un contexto diferente y encontré la misma dificultad con objetos similares a archivos que en realidad no lo son).Sólo como una actualización:Para Python 3.0, su código debe modificarse ligeramente:

import urllib.request, io, zipfile

try:
    remotezip = urllib.request.urlopen(url)
    zipinmemory = io.BytesIO(remotezip.read())
    zip = zipfile.ZipFile(zipinmemory)
    for fn in zip.namelist():
        if fn.endswith(".ranks"):
            ranks_data = zip.read(fn)
            for line in ranks_data.split("\n"):
                # do something with each line
except urllib.request.HTTPError:
    # handle exception

¡Esto hará el trabajo sin descargar el archivo zip completo!

http://pypi.python.org/pypi/pyremotezip

Tenga en cuenta que simplemente descomprimir un archivo ZIP puede provocar una vulnerabilidad de seguridad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top