zip-Archiv aus dem Netz

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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???
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Indem du sie runterlaedst und dann oeffnest.
Entweder du speicherst das Archiv als temporaere Datei oder du benutzt StringIO.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

mist

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

Trotzdem vielen Dank.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Klar:

Code: Alles auswählen

zip = zipfile.ZipFile(StringIO.StringIO(urllib2.urlopen(url).read()))
Aber bitte nicht nutzen.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

DAT DAT KLAPPT JA

SUPER

DANKE
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cofi hat geschrieben:Aber bitte nicht nutzen.
Daher ist es nur bedingt sinnvoll sowas zu posten, wie du im Endergebnis jetzt siehst ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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 ...
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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__'
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Oh das koennte sein.

Aber dafuer gibt es `contextlib.closing`:

Code: Alles auswählen

import contextlib
with contextlib.closing(urllib2.urlopen(url)) as remote:
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Antworten