2015-10-27 45 views
1

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

>>> 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' 

这对单元测试非常恼人。

+0

我认为gzip标题包含一个时间戳 – andars

+0

这与python无关。你可以从命令行看到运行gzip的相同的东西。 – stark

+0

我在node.js中制作了完全相同的代码,并且它是一致的。 –

回答

2

gzip标题包含修改时间戳。 请参阅here

对于单元测试,您可能会跳过标题并比较其余部分。

事情是这样的:

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

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

不知道关于在但价值5似乎是它使用的头大小。

+0

如何摆脱时间戳?或者强迫它达到一定的价值? –

+0

我不认为'gzip'提供了一种省略时间戳的方法,所以你可以切掉标题,如我的编辑所示。 – andars

+0

我可以强制'mtime'为0,适合我。 –

2

如上所述,gzip标题包含一个时间戳。如果你传递-n或--no-name选项(到命令行zip程序),这些被忽略。

相关问题