GZIP(字节流)压缩Python3中的神秘字节

时间:2014-01-06 20:04:52

标签: python-3.x compression gzip zlib

我有一个包含大量内容的文件(符号重<>?!""''=:;),我希望压缩部分,我读取文件,转换为字节流,然后压缩。我希望压缩模糊地出现: \x1f\x8b\x08\x00\x00\x92\x04等等。

然而,它更像是: \x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa等等。当然我应该得到00到ff范围内的十六进制值?

Python3代码的主要摘要:

with open('somefile', 'r') as f:
  for lines in f.readlines():
    messages = (str(lines)).encode('ascii') #Or 'UTF-8' both produce funny results
    compMessages = gzip.compress(messages) #Default level of 6 is fine here
    return compMessages

我能找到的唯一有趣/相关的信息是 len(str(lines))len(lines.encode('ascii'))

的值不同

想法好吗?

1 个答案:

答案 0 :(得分:1)

你的输出没有任何“神秘”。你只是没有正确阅读它。这样:

\x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa

相同
\x1f\x8b\x08\x00\x00\xa6\x30\x76\x3f\x04\x7b\x3f\x58\x0e\x44\x61

只是ASCII可打印字符(十六进制值介于0x200x7E之间),例如0v?{Da显示为ascii值,而不是\x转义码。

要验证这一点,请注意以下事项:

>>> [ord(i) for i in '\x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa']
[31, 139, 8, 0, 0, 166, 48, 118, 63, 4, 123, 63, 88, 14, 68, 97]

所有值均在0255之间。