2016-04-27 3 views
1

Ich bekomme DeprecationWarning: Struct Integer Überlauf Maskierung ist veraltet Fehler in z.write, wenn die Datei zu 4GB ankommt.Zip riesige einfache Dateien (+ 20GB) mit Python ZIPLIB-Datei

Mein Code:

def compressOutputFile(outputFileName, outputPath=UXConfig.myPath): 
    os.chdir(outputPath) 
    z= zipfile.ZipFile(outputFileName+'.zip', 'wb',zipfile.ZIP_DEFLATED,allowZip64=True) 
    UXUtils.log('Writting file') 
    z.write(outputFileName) 
    UXUtils.log('Writting finished') 
    z.close() 
    tempFiles.append(outputPath+outputFileName) 

Die Datei beschädigt ist, nicht weil ich öffnen kann und die Linien sehen.

Antwort

0

habe ich nie das zipfile Modul aber ich verwendet, um eine with Aussage und versuchte, sie gegen eine 8 GB-Datei und es hat funktioniert (von 8 GB bis 44MB: o):

def zipItUp(file): 
    with zipfile.ZipFile('zipped.zip', 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True) as zipped: 
     zipped.write(file) 

sehen, ob dies alles tut. Wenn nicht, denke ich, dass die einzige andere Lösung, die ich mir vorstellen kann, das Partitionieren Ihrer Datei und dann das Zip auf jedem Stück ist.

EDIT: Wenn Sie Python verwenden 2.6, dann erwägen, einschließlich der contextlib Modul den Ausgang Fehler zu behandeln, wie in diesem topic verwiesen.

Hier würde der überarbeitete Code sein:

import contextlib 

def zipItUp(file): 
    with contextlib.closing(zipfile.ZipFile('zipped.zip', 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True)) as zipped: 
     zipped.write(file) 

Prüfen Sie, ob das funktioniert. Prost!

+0

Ich benutze Python 2.6 und es wirft "zipfile Instanz hat kein Attribut '__exit__'" –

+0

@ LauraAbadAvilés Ich habe gerade eine Bearbeitung für die 2.6-Implementierung hinzugefügt. Ich hoffe es hilft. –

+0

noch fehlgeschlagen. Es erzeugt immer eine Datei mit 4.926.126.365 Bytes, die richtig scheint, aber wenn ich versuche, Datei zu extrahieren, sagt mir sumcontrol Fehler. Möglicherweise kann ZIpFile keine Zip-Dateien mit dieser Größe erstellen. –