Seite 1 von 1

zip-Archiv aus dem Netz

Verfasst: Freitag 27. August 2010, 20:43
von smith0815
Hi

ich hoffe es ist nur eine einfache Frage, doch stelle ich mich im Moment sehr doof an.

Ein Zip-Archiv öffne ich mit zipfile und eine Datei aus dem Netz mit urllib, aber wie öffne ich ein Zip-Archiv aus dem Netz???

Re: zip-Archiv aus dem Netz

Verfasst: Freitag 27. August 2010, 20:54
von cofi
Indem du sie runterlaedst und dann oeffnest.
Entweder du speicherst das Archiv als temporaere Datei oder du benutzt StringIO.

Re: zip-Archiv aus dem Netz

Verfasst: Freitag 27. August 2010, 21:00
von smith0815
mist

ich hoffte, ich könnte den "Input-Kanal" irgendwie direkt übergeben.

Trotzdem vielen Dank.

Re: zip-Archiv aus dem Netz

Verfasst: Freitag 27. August 2010, 21:08
von cofi
Klar:

Code: Alles auswählen

zip = zipfile.ZipFile(StringIO.StringIO(urllib2.urlopen(url).read()))
Aber bitte nicht nutzen.

Re: zip-Archiv aus dem Netz

Verfasst: Freitag 27. August 2010, 21:49
von smith0815
DAT DAT KLAPPT JA

SUPER

DANKE

Re: zip-Archiv aus dem Netz

Verfasst: Freitag 27. August 2010, 22:10
von Leonidas
cofi hat geschrieben:Aber bitte nicht nutzen.
Daher ist es nur bedingt sinnvoll sowas zu posten, wie du im Endergebnis jetzt siehst ;)

Re: zip-Archiv aus dem Netz

Verfasst: Freitag 27. August 2010, 22:13
von cofi
Ich weiss gar nicht, wo ich anfangen soll ...

Bitte verwenden:

Code: Alles auswählen

with urllib2.urlopen(url) as remote:
    with zipfile.ZipFile(StringIO.StringIO(remote.read())) as zip:
        doWork()
@Leonidas: Ja, ich haette es besser wissen sollen ...

Re: zip-Archiv aus dem Netz

Verfasst: Freitag 27. August 2010, 22:56
von smith0815
keine Sorge, ich hab es nicht 100%ig übernommen bzw. an meine Bedürfnisse angepasst.
Exception-Handling ist auch mit dabei.

Mir ging es eher um den Ansatz.

Da ich, wie vielleicht schon zu ersehen war ein etwas unerfahrener Noob bin.

Re: zip-Archiv aus dem Netz

Verfasst: Samstag 28. August 2010, 18:51
von smith0815
mal ne Zusatzfrage.

Kann es sein, dass ich bei urllib2 nicht mit with arbeiten kann?

Fehlermeldung:
with urllib2.urlopen(urlzip) as remote:
AttributeError: addinfourl instance has no attribute '__exit__'

Re: zip-Archiv aus dem Netz

Verfasst: Samstag 28. August 2010, 19:07
von cofi
Oh das koennte sein.

Aber dafuer gibt es `contextlib.closing`:

Code: Alles auswählen

import contextlib
with contextlib.closing(urllib2.urlopen(url)) as remote:

Re: zip-Archiv aus dem Netz

Verfasst: Samstag 28. August 2010, 21:31
von sma
smith0815 hat geschrieben:ich hoffte, ich könnte den "Input-Kanal" irgendwie direkt übergeben.
Eine ZIP-Datei kann leider nicht einfach aus einem Stream gelesen werden, da die Informationen, wie die Datei aufgebaut ist, am Ende der Datei stehen. Daher braucht man wahlfreien Zugriff. Ein besseres Format für einen stromartigen Zugriff (direkt über den "Input-Kanal") wäre tar (mit gzip oder bzip2 komprimiert).

Stefan