当文件达到 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/