我对使用Python的gzip模块压缩数据感兴趣。碰巧我希望压缩的输出具有确定性,因为通常来说,这通常是一个非常方便的属性-如果某些非gzip感知的进程将在寻找输出中的变化,例如,或者输出将被加密签名。

不幸的是,每次输出都是不同的。据我所知,唯一的原因是gzip header 中的timestamp字段,Python模块始终使用当前时间填充该字段。我认为实际上不允许您在没有时间戳的情况下使用gzip流,这太糟糕了。

无论如何,Python的gzip模块的调用者似乎都无法提供正确的基础数据修改时间。 (实际的gzip程序似乎在可能的情况下使用输入文件的时间戳。)我想这是因为基本上唯一关心时间戳的是写入文件时的gunzip命令-现在,我,因为我想要确定性的输出。这是不是要求太过分了?

还有其他人遇到过这个问题吗?

用Python中的任意时间戳对数据进行gzip编码的最糟糕的方法是什么?

最佳答案

从Python 2.7开始,您可以在gzip header 中指定要使用的时间。 N.B.文件名也包含在标题中,也可以手动指定。

import gzip

content = b"Some content"
f = open("/tmp/f.gz", "wb")
gz = gzip.GzipFile(fileobj=f,mode="wb",filename="",mtime=0)
gz.write(content)
gz.close()
f.close()

关于python - 从Python设置gzip时间戳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/264224/

10-15 05:17