3

我有一个大文本文件,主要由数字和一些分隔符等组成,|{}[]:。我使用 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))

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

我在保存文件时做错了什么?

4

2 回答 2

2

你使用的压缩机很糟糕。试试zlib.compress吧。

于 2015-03-08T07:01:03.867 回答
1

一般的答案是“当数据是随机位时”,或者已经压缩。99% 的其他正常事物都会压缩得很好。对于 ascii 数据(比如你说你正在使用的数据),真正微不足道的压缩器就足够了,只需 Huffman 编码就可以让你得到一个不错的提升,你说你只使用了十几个独特的字符。

这意味着要么你有一堆你没有告诉我们的随机数据,要么压缩器中有一个错误。

于 2015-03-08T06:49:11.623 回答