2016-04-27 3 views
1

Я получаю DeprecationWarning: struct integer overflow masking устарел ошибка в z.write, когда файл достигает 4 ГБ.Как zip огромные простые файлы (+ 20 ГБ) с ziplib файлом python

Мой код:

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) 

Файл не поврежден, потому что я могу открыть и увидеть линии.

ответ

0

Я никогда не использовал ZipFile модуля, но я использовал with заявление и попытался его с файлом 8GB и он работал (от 8 Гб до 44MB: о):

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

Смотрите, если это ничего не делает. Если нет, я думаю, что единственное другое решение, о котором я могу думать, - это разбить ваш файл, а затем на каждый кусок.

EDIT: Если вы используете Python 2.6, а затем рассмотреть вопрос о включении модуля contextlib для обработки ошибки выхода как указано в этом topic.

Здесь будет пересмотренный код:

import contextlib 

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

Смотрите, если это работает. Ура!

+0

Я использую Python 2.6, и он поднимает «экземпляр zipfile не имеет атрибута» __exit__ » –

+0

@ LauraAbadAvilés Я просто добавил редактирование для реализации 2.6. Надеюсь, поможет. –

+0

все еще провал. Он всегда генерирует файл с 4.926.126.365 байтами, который кажется правильным, но когда я пытаюсь извлечь файл, он сообщает мне ошибку sumcontrol. Возможно, ZIpFile не может создавать zip-файлы с таким размером. –