压缩什么时候增加文件大小?

时间:2015-03-07 19:54:07

标签: python-2.7 file-io compression lzw

我有一个大文本文件,主要由数字和一些分隔符组成,如,|{}[]:等。我使用Lempel-Ziv编码进行压缩。我使用的代码不是我的代码,而是来自Rosetta代码的代码。我通过行压缩运行代码,并通过块压缩运行一次块:

def readChunk(file_object, size = 1024):
    while True:
        data = file_object.read(size)
        if not data:
            break
        yield data

def readByChunk():
    with open(LARGE_FILE, 'r') as f:
        for data in readChunk(f, 2048):
            compressed_chunk = compress(data)
            compressed_chunk = map(lambda a : str(a), compressed_chunk)
            comp_file.write(" ".join(compressed_chunk))

def readLineByLine():
    with open(LARGE_FILE, 'r') as f:
        lines = f.readlines()
        for data in lines:
            compressed_line = compress(data)
            compressed_line = map(lambda a : str(a), compressed_line)
            comp_file.write(" ".join(compressed_line))

两个函数都输出一个比原始文件大得多的文件!!解压缩工作正常,即我能够恢复原始文本,所以我认为代码是正确的。

我在保存文件时做错了吗?

2 个答案:

答案 0 :(得分:2)

你使用的压缩机非常糟糕。请改为zlib.compress

答案 1 :(得分:1)

一般答案是"当数据是随机位"或已经压缩时。 99%的其他正常事物会压缩得很好。对于ascii数据(就像你说你正在使用的数据一样),真正琐碎的压缩器就足够了,只需要霍夫曼编码就可以得到一个不错的提升,并且你说你只使用了十几个独特的字符。

这意味着您要么拥有一堆随机数据,而这些数据并未告诉我们,或者压缩机中存在错误。