【问题标题】:Trying to zip some files in python. But the size is not getting compressed.试图在 python 中压缩一些文件。但是大小并没有被压缩。
【发布时间】: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

有什么建议吗?

【问题讨论】:

标签: python python-3.x shell unix zipfile


【解决方案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)

取决于选择的压缩算法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2013-09-11
    相关资源
    最近更新 更多