跳转到主要内容

使用smaz进行的小字符串压缩,支持Python 3。

项目描述

smaz-py3

PyPI - Downloads

使用smaz压缩算法进行的小字符串压缩。

这个库封装了原始的C代码,因此应该相当快。它还包含一个使用hypothesis基于属性测试的测试套件——这是一种复杂的说法,意思是测试是用随机生成的字符串(使用了大部分Unicode)运行的,以更好地保护边缘情况。

为什么需要这个?

您正在处理大量的短字符串(文本消息、URL等),并希望节省空间。

根据原始代码和注释,它使用英文字符串(高达50%)且不包含大量数字时可以达到最佳压缩效果。然而,任何其他语言可能也能很好地工作(据说高达30%)。

请注意,在某些情况下,压缩可能会增加大小。请记住这一点,并可能首先运行一些测试。下面也解释了如何测量大小。

如何使用它?

让我们安装

$ pip install smaz-py3

注意-py3非常重要。有一个原始版本,Benjamin Sergeant做出了贡献,但它不与Python 3+兼容。

现在,一个使用示例。

import smaz
# First we compress our example sentence.
compressed = smaz.compress("The quick brown fox jumps over the lazy dog.")
# The output is raw bytes. As can be seen in the decompress() call below.
# Now, we decompress these raw bytes again. This should return our example sentence.
decompressed = smaz.decompress(b'H\x00\xfeq&\x83\xfek^sA)\xdc\xfa\x00\xfej&-<\x95\xe7\r\x0b\x89\xdbG\x18\x06;n')
#  This does not fail, which means we have successfully compressed and decompressed
#  without damaging anything.
assert decompressed == "The quick brown fox jumps over the lazy dog."

我们压缩了多少?

# First, we get the actual byte size of our example string.
original_size = len("The quick brown fox jumps over the lazy dog.".encode("utf-8"))  # 44 bytes
# As `compressed` is already raw bytes, we can also call len() on this
compressed_size = len(compressed)  # 31 bytes
compression_ratio = 1 - compressed_size / original_size  # 0.295

所以我们节省了大约30%(0.295 * 100和一些四舍五入)。

如果压缩比低于0,我们实际上会增加字符串的大小。是的,这种情况可能发生。再次强调,smaz在小型字符串上表现最佳。

关于NULL字节的小提示

目前,smaz-py3不支持包含NULL字节(\x00)的字符串压缩

>>> import smaz
>>> smaz.compress("The quick brown fox\x00 jumps over the lazy dog.")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: embedded null character

我这么做的理由是,在大多数情况下,你本来就需要在之前清理掉它。如果你认为这是错误的,请打开一个GitHub问题。我很乐意接受更多的意见!

从Python 2迁移到smaz

如果你一直在使用Python 2的smaz,这个Python 3版本提供了相同的API,因此可以无缝替换。

重要:在开发这个扩展的过程中,我认为我在原始库中发现了错误。使用Python 2.7.16

>>> import smaz
>>> smaz.compress("The quick brown fox jumps over the lazy dog.")
'H'  # this is wrong.
>>> small = smaz.compress("The quick brown fox jumps over the lazy dog.")
>>> smaz.decompress(small)
'The'  # information lost.

因此,如果你确实是从这里升级的,请确保你不会受到影响。smaz-py3不会受到这个错误的困扰。

在幕后,smaz使用空字节进行压缩。然而,当从C转换为Python字符串对象时,空字节用来标记字符串的结尾。上面的句子压缩后,空字节紧跟在H后面(H\x00\xfeq…)。这就是为什么它在那里停止的原因。再次强调,smaz-py3不会受到这个问题的困扰,这主要是因为我选择了这个例子。

致谢

功不唐捐。首先感谢antirez的SMAZ压缩,以及Benjamin Sergeant编写的原始Python 2包装器

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定该选择哪个,请了解更多关于安装软件包的信息。

源分布

smaz-py3-1.1.3.tar.gz (22.5 kB 查看哈希)

上传时间:

构建分布

smaz_py3-1.1.3-pp39-pypy39_pp73-win_amd64.whl (15.4 kB 查看哈希)

上传时间: PyPy Windows x86-64

smaz_py3-1.1.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.0 kB 查看哈希)

上传时间: PyPy manylinux: glibc 2.17+ x86-64

smaz_py3-1.1.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.4 kB 查看哈希)

上传时间: PyPy manylinux: glibc 2.17+ ARM64

smaz_py3-1.1.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (12.6 kB 查看哈希)

上传时间: PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

smaz_py3-1.1.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (10.1 kB 查看哈希值)

上传时间: PyPy macOS 10.9+ x86-64

smaz_py3-1.1.3-pp38-pypy38_pp73-win_amd64.whl (15.4 kB 查看哈希值)

上传时间: PyPy Windows x86-64

smaz_py3-1.1.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.0 kB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ x86-64

smaz_py3-1.1.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.4 kB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ ARM64

smaz_py3-1.1.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (12.6 kB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

smaz_py3-1.1.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (10.1 kB 查看哈希值)

上传时间: PyPy macOS 10.9+ x86-64

smaz_py3-1.1.3-pp37-pypy37_pp73-win_amd64.whl (15.4 kB 查看哈希值)

上传时间: PyPy Windows x86-64

smaz_py3-1.1.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.1 kB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ x86-64

smaz_py3-1.1.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.4 kB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ ARM64

smaz_py3-1.1.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (12.6 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

smaz_py3-1.1.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (10.1 kB 查看哈希)

上传于 PyPy macOS 10.9+ x86-64

smaz_py3-1.1.3-cp311-cp311-win_amd64.whl (15.4 kB 查看哈希)

上传于 CPython 3.11 Windows x86-64

smaz_py3-1.1.3-cp311-cp311-win32.whl (14.2 kB 查看哈希)

上传于 CPython 3.11 Windows x86

smaz_py3-1.1.3-cp311-cp311-musllinux_1_1_x86_64.whl (27.7 kB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.1+ x86-64

smaz_py3-1.1.3-cp311-cp311-musllinux_1_1_s390x.whl (28.1 kB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.1+ s390x

smaz_py3-1.1.3-cp311-cp311-musllinux_1_1_ppc64le.whl (28.8 kB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.1+ ppc64le

smaz_py3-1.1.3-cp311-cp311-musllinux_1_1_i686.whl (25.9 kB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.1+ i686

smaz_py3-1.1.3-cp311-cp311-musllinux_1_1_aarch64.whl (28.1 kB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.1+ ARM64

smaz_py3-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.1 kB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

smaz_py3-1.1.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (22.7 kB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ s390x

smaz_py3-1.1.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (22.9 kB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ ppc64le

smaz_py3-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (22.4 kB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ ARM64

smaz_py3-1.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (20.1 kB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

smaz_py3-1.1.3-cp311-cp311-macosx_11_0_arm64.whl (10.6 kB 查看哈希值)

上传时间: CPython 3.11 macOS 11.0+ ARM64

smaz_py3-1.1.3-cp311-cp311-macosx_10_9_x86_64.whl (10.3 kB 查看哈希值)

上传时间: CPython 3.11 macOS 10.9+ x86-64

smaz_py3-1.1.3-cp310-cp310-win_amd64.whl (15.4 kB 查看哈希值)

上传时间: CPython 3.10 Windows x86-64

smaz_py3-1.1.3-cp310-cp310-win32.whl (14.2 kB 查看哈希值)

上传时间: CPython 3.10 Windows x86

smaz_py3-1.1.3-cp310-cp310-musllinux_1_1_x86_64.whl (26.9 kB 查看哈希值)

上传时间: CPython 3.10 musllinux: musl 1.1+ x86-64

smaz_py3-1.1.3-cp310-cp310-musllinux_1_1_s390x.whl (27.3 kB 查看哈希值)

上传时间: CPython 3.10 musllinux: musl 1.1+ s390x

smaz_py3-1.1.3-cp310-cp310-musllinux_1_1_ppc64le.whl (28.0 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ ppc64le

smaz_py3-1.1.3-cp310-cp310-musllinux_1_1_i686.whl (25.0 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ i686

smaz_py3-1.1.3-cp310-cp310-musllinux_1_1_aarch64.whl (27.2 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ ARM64

smaz_py3-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.1 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

smaz_py3-1.1.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (22.7 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ s390x

smaz_py3-1.1.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (22.9 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ppc64le

smaz_py3-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (22.4 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

smaz_py3-1.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (20.1 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

smaz_py3-1.1.3-cp310-cp310-macosx_11_0_arm64.whl (10.5 kB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

smaz_py3-1.1.3-cp310-cp310-macosx_10_9_x86_64.whl (10.3 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

smaz_py3-1.1.3-cp39-cp39-win_amd64.whl (15.4 kB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

smaz_py3-1.1.3-cp39-cp39-win32.whl (14.2 kB 查看哈希值)

上传于 CPython 3.9 Windows x86

smaz_py3-1.1.3-cp39-cp39-musllinux_1_1_x86_64.whl (26.7 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ x86-64

smaz_py3-1.1.3-cp39-cp39-musllinux_1_1_s390x.whl (27.1 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ s390x

smaz_py3-1.1.3-cp39-cp39-musllinux_1_1_ppc64le.whl (27.8 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ ppc64le

smaz_py3-1.1.3-cp39-cp39-musllinux_1_1_i686.whl (24.8 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ i686

smaz_py3-1.1.3-cp39-cp39-musllinux_1_1_aarch64.whl (27.1 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ ARM64

smaz_py3-1.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

smaz_py3-1.1.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (22.5 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ s390x

smaz_py3-1.1.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (22.8 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ppc64le

smaz_py3-1.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (22.2 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ ARM64

smaz_py3-1.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (19.9 kB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

smaz_py3-1.1.3-cp39-cp39-macosx_11_0_arm64.whl (10.5 kB 查看哈希值)

上传时间: CPython 3.9 macOS 11.0+ ARM64

smaz_py3-1.1.3-cp39-cp39-macosx_10_9_x86_64.whl (10.3 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ x86-64

smaz_py3-1.1.3-cp38-cp38-win_amd64.whl (15.4 kB 查看哈希值)

上传时间: CPython 3.8 Windows x86-64

smaz_py3-1.1.3-cp38-cp38-win32.whl (14.2 kB 查看哈希值)

上传时间: CPython 3.8 Windows x86

smaz_py3-1.1.3-cp38-cp38-musllinux_1_1_x86_64.whl (26.9 kB 查看哈希值)

上传时间: CPython 3.8 musllinux: musl 1.1+ x86-64

smaz_py3-1.1.3-cp38-cp38-musllinux_1_1_s390x.whl (27.3 kB 查看哈希值)

上传时间: CPython 3.8 musllinux: musl 1.1+ s390x

smaz_py3-1.1.3-cp38-cp38-musllinux_1_1_ppc64le.whl (28.0 kB 查看哈希值)

上传时间: CPython 3.8 musllinux: musl 1.1+ ppc64le

smaz_py3-1.1.3-cp38-cp38-musllinux_1_1_i686.whl (25.0 kB 查看哈希值)

上传时间: CPython 3.8 musllinux: musl 1.1+ i686

smaz_py3-1.1.3-cp38-cp38-musllinux_1_1_aarch64.whl (27.3 kB 查看哈希值)

上传时间: CPython 3.8 musllinux: musl 1.1+ ARM64

smaz_py3-1.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.5 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64

smaz_py3-1.1.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (23.1 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ s390x

smaz_py3-1.1.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (23.3 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ ppc64le

smaz_py3-1.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (22.8 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ ARM64

smaz_py3-1.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (20.5 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

smaz_py3-1.1.3-cp38-cp38-macosx_11_0_arm64.whl (10.5 kB 查看哈希值)

上传时间 CPython 3.8 macOS 11.0+ ARM64

smaz_py3-1.1.3-cp38-cp38-macosx_10_9_x86_64.whl (10.3 kB 查看哈希值)

上传时间 CPython 3.8 macOS 10.9+ x86-64

smaz_py3-1.1.3-cp37-cp37m-win_amd64.whl (15.4 kB 查看哈希值)

上传时间 CPython 3.7m Windows x86-64

smaz_py3-1.1.3-cp37-cp37m-win32.whl (14.2 kB 查看哈希值)

上传时间 CPython 3.7m Windows x86

smaz_py3-1.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl (28.0 kB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ x86-64

smaz_py3-1.1.3-cp37-cp37m-musllinux_1_1_s390x.whl (28.4 kB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ s390x

smaz_py3-1.1.3-cp37-cp37m-musllinux_1_1_ppc64le.whl (29.0 kB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ ppc64le

smaz_py3-1.1.3-cp37-cp37m-musllinux_1_1_i686.whl (26.1 kB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ i686

smaz_py3-1.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl (28.4 kB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ ARM64

smaz_py3-1.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.5 kB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ x86-64

smaz_py3-1.1.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (23.1 kB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ s390x

smaz_py3-1.1.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (23.3 kB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ ppc64le

smaz_py3-1.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (22.8 kB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ ARM64

smaz_py3-1.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (20.5 kB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

smaz_py3-1.1.3-cp37-cp37m-macosx_10_9_x86_64.whl (10.3 kB 查看哈希值)

上传于 CPython 3.7m macOS 10.9+ x86-64

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面