2013-07-15 6 views
5

Ich habe eine 1,4 GB Zip-Datei und versuche, jedes Mitglied in Folge zu liefern. Die Zip-Datei Modul hält eine BadZipfile Ausnahme zu werfen, die besagt, dassPython zipfile Modul denkt fälschlicherweise, ich habe eine Zip-Datei, die mehrere Festplatten umfasst, wirft BadZipfile Fehler

„zipfile.BadZipfile: ZipFiles, die über mehrere Datenträger erstrecken, werden nicht unterstützt“.

Hier ist mein Code:

import zipfile 

def iterate_members(zip_file_like_object): 
    zflo = zip_file_like_object 
    assert zipfile.is_zipfile(zflo) # Here is where the error happens. 
    # If I comment out the assert, the same error gets thrown on this next line: 
    with zipfile.ZipFile(zflo) as zip: 
    members = zip.namelist() 
    for member in members: 
     yield member 

fn = "filename.zip" 
iterate_members(open(fn, 'rb')) 

Ich bin mit Python 2.7.3. Ich habe auf Windows 8 und Ubuntu mit dem gleichen Ergebnis versucht. Jede Hilfe sehr geschätzt.

+0

können Sie die Zip-Datei (oder einen Link zu ihr) posten? Der [Code, der zu diesem Fehler führt] (http://hg.python.org/cpython/file/2.7/Lib/zipfile.py#l176) ist ziemlich einfach; Es wird geprüft, ob der Dateiheader mehr als eine Platte deklariert oder die Plattennummer der Datei anders als Null ist. – phihag

+0

Danke phihag. Leider kann ich die Datei nicht veröffentlichen, da sie vertrauliche Kundendaten enthält. – user1541702

+0

Nun, können Sie eine Zip-Datei mit großen Testdaten generieren, die immer noch das Problem zeigt? – phihag

Antwort

5

Ich bekomme den gleichen Fehler auf einer ähnlichen Datei, obwohl ich Python 3.4

der Lage bin mit War es zu beheben, indem Bearbeitungszeile 205 in zipfile.py Quellcode:

if diskno != 0 or disks != 1: 
    raise BadZipFile("zipfiles that span multiple disks are not supported") 

zu:

if diskno != 0 or disks > 1: 

hoffe, das hilft