如何使用python的ziplib文件压缩巨大的普通文件(+ 20GB)

时间:2016-04-27 15:58:47

标签: python zip large-files zipfile

当文件到达4GB时,我得到 DeprecationWarning:z.write中的struct integer overflow masking is deprecated 错误。

我的代码:

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)

该文件未损坏,因为我可以打开并查看这些行。

1 个答案:

答案 0 :(得分:0)

我从未使用过zipfile模块,但我使用了with语句并尝试对抗8GB文件并且它有效(从8GB到44MB:o):

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

看看这是否有效。如果没有,我认为我能想到的唯一其他解决方案是将文件分区,然后在每个块上分区。

修改: 如果您使用的是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)

看看这是否有效。干杯!