Wie lese ich Dateien von einem Remote-Zip-Archiv über HTTP mit Python ausgewählt?

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

  •  01-07-2019
  •  | 
  •  

Frage

Ich brauche ausgewählte Dateien zu lesen, auf dem Dateinamen entsprechen, von einem Remote-Zip-Archiv mit Python. Ich will nicht die volle zip in eine temporäre Datei speichern (es ist nicht so groß, so kann ich alles im Speicher verarbeiten).

Ich habe bereits den Code geschrieben und es funktioniert, und ich bin der Beantwortung dieser mir so kann ich später danach suchen. Da aber Hinweise darauf, dass ich bin einer des stummen Teilnehmers auf Stackoverflow, ich bin sicher, dass es Raum für Verbesserungen.

War es hilfreich?

Lösung

Hier ist, wie ich es getan hätte (Rupfen alle Dateien in ".ranks" enden):

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

Andere Tipps

Danke Marcel für Ihre Frage und Antwort (ich das gleiche Problem in einem anderen Zusammenhang hatte und traf auf die gleiche Schwierigkeit mit dateiähnliche Objekte, die nicht wirklich Datei-like ist)! Nur als Update: Für Python 3.0, muss Ihr Code leicht geändert werden:

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

Dies wird die Arbeit erledigen, ohne die gesamte Zip-Datei herunterladen!

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

Beachten Sie Dekomprimieren, die lediglich eine ZIP-Datei in eine Sicherheitslücke .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top