我有一个大文本文件,主要由数字和一些分隔符组成,如,|{}[]:
等。我使用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))
两个函数都输出一个比原始文件大得多的文件!!解压缩工作正常,即我能够恢复原始文本,所以我认为代码是正确的。
我在保存文件时做错了吗?
答案 0 :(得分:2)
你使用的压缩机非常糟糕。请改为zlib.compress
。
答案 1 :(得分:1)
一般答案是"当数据是随机位"或已经压缩时。 99%的其他正常事物会压缩得很好。对于ascii数据(就像你说你正在使用的数据一样),真正琐碎的压缩器就足够了,只需要霍夫曼编码就可以得到一个不错的提升,并且你说你只使用了十几个独特的字符。
这意味着您要么拥有一堆随机数据,而这些数据并未告诉我们,或者压缩机中存在错误。