在Python中存储base64数据的最节省内存的方法是什么?
假设你有一个用base64编码的MD5哈希值。那么每个字符只需要6个比特位来存储在这个22字节的字符串中(不包括最后的'==')。所以,每个base64的MD5哈希值可以缩小到6*22 = 132个比特位,这样比原来的8*22=176个比特位的字符串节省了25%的内存空间。
有没有什么Python模块或函数可以让你以上述方式存储base64数据呢?
4 个回答
5
简单来说,就是把base64格式的数据解码成二进制格式:
>>> b64 = "COIC09jwcwjiciOEIWIUNIUNE9832iun"
>>> len(b64)
32
>>> b = b64.decode("base64")
>>> b
'\x08\xe2\x02\xd3\xd8\xf0s\x08\xe2r#\x84!b\x144\x85\r\x13\xdf7\xda+\xa7'
>>> len(b)
24
8
存储经过base64编码的数据最有效的方法是先解码,然后以二进制形式存储。base64其实是一种传输编码,存储数据时用它没有太大意义,尤其是在内存中,除非你有特别的理由。
另外,稍微啰嗦一下:哈希函数的输出并不是一个十六进制字符串,那只是常见的一种表示方式。哈希函数的输出实际上是一些字节的二进制数据。如果你使用的是md5、sha或者hashlib模块,比如说,你根本不需要把它编码成其他格式,只需在哈希对象上调用.digest()
,而不是.hexdigest()
。
1
大卫给出了一个适用于所有base64字符串的解决方案。
只需在base64模块中使用
base64.decodestring。也就是说,
import base64 binary = base64.decodestring(base64_string)
这是原始base64字符串的一种更节省内存的表示方式。如果你在处理base64的md5时去掉了末尾的'==',可以这样使用
base64.decodestring(md5+'==')