Come faccio a leggere i file selezionati da una remota archivio Zip su HTTP, utilizzando Python?

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

  •  01-07-2019
  •  | 
  •  

Domanda

Ho bisogno di leggere i file selezionati, corrispondente al nome del file da remoto archivio zip usando Python.Io non voglio salvare il full zip in un file temporaneo (non è così grande, così posso gestire tutto in memoria).

Ho già scritto il codice e funziona, e sto rispondendo a me, così posso cercare più tardi.Ma dal momento che l'evidenza suggerisce che io sono uno dei più scemo partecipanti su Stackoverflow, sono sicuro che c'è spazio per il miglioramento.

È stato utile?

Soluzione

Ecco come l'ho fatto (prendendo tutti i file che terminano in ".i ranghi"):

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

Altri suggerimenti

Grazie Marcel per la tua domanda e risposta (ho avuto lo stesso problema in un contesto diverso e incontrato la stessa difficoltà con i file di oggetti di non essere realmente file-come)!Proprio come un aggiornamento:Per Python 3.0, il codice deve essere leggermente modificata:

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

Questo farà il lavoro senza scaricare l'intero file zip!

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

Tenete a mente che solo la decompressione di un file ZIP può comportare una vulnerabilità di sicurezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top