Python中哪种压缩方式效果最好?
在Python中,哪种压缩方法的压缩效果最好呢?
常用的zlib.compress()
是不是效果最好的,还是说还有其他更好的选择?我希望能得到尽可能好的压缩效果。
我正在压缩字符串,并通过UDP发送这些数据。一个典型的字符串大约有1,700,000字节。
3 个回答
选择最好的压缩算法其实要看你处理的数据类型。如果你在处理的是一串随机数字的字符串(这种情况下没有任何压缩算法能起作用),那么了解数据的类型通常能帮助你找到比通用算法更好的选择(可以看看其他回答中提到的一些现成的通用压缩算法)。
如果你在处理图片,最好选择有损压缩格式(也就是对像素有意识的格式),而不是无损格式。这样能得到更好的效果。用无损格式重新压缩已经有损的图片是浪费时间。
我会去看看PIL,看看有什么可以用的。比如在发送之前,把图片转换成jpeg格式,并设置一个合适的压缩比,这样会非常高效。
如果你使用UDP协议,要特别小心,因为它可能会丢失一些数据包,而大多数压缩格式对文件缺失的部分非常敏感。不过,这个问题可以在应用层面上进行处理。
如果你愿意在性能和压缩效果之间做一些取舍,那么bz2库通常比gz(zlib)库的压缩效果要好。
还有其他一些压缩库,比如xz(LZMA2),它们可能会提供更好的压缩效果,但这些库似乎并不在Python的核心库中。
补充:根据你处理的图像类型,可能不会获得太多额外的压缩效果。很多图像格式在保存时已经进行了压缩,除非是原始格式、bmp格式或未压缩的tiff格式。建议你在不同的压缩类型之间进行测试。
补充2:如果你决定进行图像压缩,Image Magick支持Python绑定,并且支持多种图像转换类型。
我相信可能还有一些不太常见的格式能压缩得更好,但在那些支持得比较好的格式中,lzma是最好的。有一些Python的接口可以在这里找到。
补充说明
在选择格式之前一定要测试一下,因为有些算法在不同的数据集上表现会有所不同。