我有一个包含大量内容的文件(符号重<>?!""''=:;
),我希望压缩部分,我读取文件,转换为字节流,然后压缩。我希望压缩模糊地出现:
\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'))
想法好吗?
答案 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可打印字符(十六进制值介于0x20
和0x7E
之间),例如0
,v
,?
,{
,D
和a
显示为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]
所有值均在0
和255
之间。