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

标签 python large-files zip

当文件达到 4GB 时,我在 z.write 中收到 DeprecationWarning: 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)

文件没有损坏,因为我可以打开并看到这些行。

最佳答案

我从未使用过 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)

看看这是否有任何作用。如果没有,我认为我能想到的唯一其他解决方案是将文件分区,然后对每个 block 进行压缩。

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

看看这是否有效。干杯!

关于python - 如何使用 python 的 ziplib 文件压缩巨大的纯文件 (+20GB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36894993/

相关文章:

Python - 如何在完成写入后移动文件

python - 试图从/nix/store 中删除一个包,现在系统出现错误,如何修复?

java - 如何将大文本文件放入数组中?

javascript - 使用 Flash + JavaScript 进行客户端压缩

Python,在内存中写入zip到文件

arrays - 在 scala 中,如何在 zip 两个数组后进行过滤

Python,从文件中一行一行读取

python - 按特定值选择行时出现棘手错误

java - 需要 Java 建议来处理未索引文件中存在的数十亿条记录

python - 在python中转换大文件