试图在 python 中压缩一些文件。但是大小并没有被压缩。

Posted

技术标签:

【中文标题】试图在 python 中压缩一些文件。但是大小并没有被压缩。【英文标题】:Trying to zip some files in python. But the size is not getting compressed. 【发布时间】:2017-05-15 14:21:11 【问题描述】:

我正在尝试压缩目录中存在的一些文件。压缩成功,但大小似乎没有压缩很多。

我的代码:

import os
import zipfile
import sys
def zipdir(client, path):
    os.chdir(path)
    if client == 'ABC':
        zipf = zipfile.ZipFile('Store.zip', 'w')
        zipf.write('Facts.txt')
        for f in os.listdir(path):
            if f.endswith('.txt') or f.endswith('.xls'):
                if 'pretty' in f:
                    zipf.write(f)
        zipf.close()

当我尝试在 unix shell 脚本中压缩它时,大小变为 40M。 但是当我尝试用 Python 压缩它时,大小是 196M

有什么建议吗?

【问题讨论】:

可能重复:见***.com/questions/4166447/… 您只需提供压缩参数 ZIP_STORED 或 ZIP_DEFLATED。 docs.python.org/2/library/zipfile.html#zipfile.ZipFile python zipfile module doesn't seem to be compressing my files的可能重复 谢谢大家。这有帮助。好像我可以搜索更多;) 【参考方案1】:

制作zipfile.ZipFile时必须指定压缩率

ZipFile 构造函数

class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)

ZIP_STORED 未压缩:

未压缩存档成员的数字常量。

因此您必须将其更改为其中之一

compression 是编写文件时使用的 ZIP 压缩方法 存档,并且应该是 ZIP_STORED、ZIP_DEFLATED、ZIP_BZIP2 或 ZIP_LZMA;

上下文管理器

最好使用上下文管理器 (with),它会在出现问题时自动打开和关闭文件

所以你可以把那部分改成类似

with zipfile.ZipFile('Store.zip', 'w', compression=zipfile.ZIP_LZMA) as zipf
    zipf.write('Facts.txt')
    for f in os.listdir(path):
        if f.endswith('.txt') or f.endswith('.xls'):
            if 'pretty' in f:
                zipf.write(f)

取决于选择的压缩算法

【讨论】:

以上是关于试图在 python 中压缩一些文件。但是大小并没有被压缩。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 postcss 在顺风中压缩文件大小?

如何在 Python 中压缩两个列表列表?

在python中压缩文件

在 python 中压缩文件时如何保留目录?

如何在 django python 中压缩上传的图像

在 IE9-10 中压缩 SVG 的背景大小