Herunterladen einer großen Datei im Python-Fehler: Die komprimierte Datei wurde beendet, bevor der End-of-Stream-Marker erreicht wurde

9

Ich lade eine komprimierte Datei aus dem Internet herunter:

%Vor%

Nachdem ich einen großen Teil der Datei heruntergeladen und bearbeitet habe, bekomme ich schließlich den Fehler:

  

Datei "/usr/lib/python3.4/lzma.py", Zeile 225, in _fill_buffer raise   EOFError ("Komprimierte Datei endete vor dem" EOFError: Komprimierte Datei   beendet, bevor der End-of-Stream-Marker erreicht wurde

Ich denke, es könnte durch eine Internetverbindung verursacht werden, die abfällt oder der Server für einige Zeit nicht reagiert. Wenn das der Fall ist, gibt es es trotzdem, um es weiter versuchen zu lassen, bis die Verbindung wieder hergestellt ist, anstatt eine Ausnahme auszulösen. Ich glaube nicht, dass es ein Problem mit der Datei ist, da ich manuell viele Dateien von der gleichen Website manuell heruntergeladen und dekomprimiert habe. Ich war auch in der Lage, einige kleinere Dateien mit Python herunterzuladen und zu dekomprimieren. Die Datei, die ich herunterladen möchte, hat eine komprimierte Größe von etwa 20 GB.

    
ClickyButton.com 01.04.2015, 08:39
quelle

4 Antworten

2

aus der Datei urllib.urlopen:

  

Eine Einschränkung: die read () Methode, wenn das Argument Größe weggelassen wird oder   negativ, kann nicht bis zum Ende des Datenstroms gelesen werden; es gibt kein   gute Möglichkeit, festzustellen, dass der gesamte Stream von einem Socket wurde   lesen Sie im allgemeinen Fall.

Vielleicht löst die lzma.open wegen der oben genannten Größe große / Verbindungsfehler / Timeout.

    
Pynchia 01.04.2015 10:38
quelle
2

Es ist wahrscheinlich liblzma Bug. Um dieses Problem zu umgehen, fügen Sie Folgendes hinzu:

%Vor%

vor dem Aufruf von lzma.open() .

    
kenorb 08.09.2015 21:40
quelle
2

Haben Sie versucht, die Anforderungsbibliothek zu verwenden? Ich glaube, es bietet eine Abstraktion über Urlib.

Die folgende Lösung sollte für Sie funktionieren, aber sie verwendet die Anforderungsbibliothek anstelle von urllib (fragt aber trotzdem & gt; urllib an!). Lassen Sie es mich wissen, wenn Sie es vorziehen, urllib weiter zu verwenden.

%Vor%     
Charles Addis 06.07.2016 16:26
quelle
0

Angenommen, Sie müssen eine große Datei herunterladen, ist es besser, den Modus "write and binary" zu verwenden, wenn Sie Inhalt in eine Datei in Python schreiben.

Sie können auch versuchen, das Python-Anfragen -Modul mehr zu verwenden als das urllib-Modul:

Siehe unten einen Arbeitscode:

%Vor%

Könnten Sie diesen Teil des Codes testen und antworten, wenn er Ihr Problem nicht löst?

Mit freundlichen Grüßen

    
A STEFANI 06.07.2016 11:14
quelle