为什么 gzip 不一致?

Why gzip is not consistent?

为什么这些行不会给我相同的结果?

>>> gzip.compress('same'.encode('ascii'))
b'\x1f\x8b\x08\x00\xe2\x0e0V\x02\xff+N\xccM\x05\x00D\xf1P\xfc\x04\x00\x00\x00'
>>> gzip.compress('same'.encode('ascii'))
b'\x1f\x8b\x08\x00\xe3\x0e0V\x02\xff+N\xccM\x05\x00D\xf1P\xfc\x04\x00\x00\x00'

这对单元测试来说很烦人。

gzip header 包含修改时间戳。 参见 here

对于单元测试,您可以跳过 header 并比较其余部分。

像这样:

a = gzip.compress('same'.encode('ascii'))
b = gzip.compress('same'.encode('ascii'))

a[5:] == b[5:]

不确定其中的值 5,但这似乎是它使用的 header 大小。

如前所述,gzip header 包含一个时间戳。如果您传递 -n 或 --no-name 选项(给 command-line zip 程序),这些将被省略。