在Python中存储base64数据的最节省内存的方法是什么?

4 投票
4 回答
2368 浏览
提问于 2025-04-16 02:27

假设你有一个用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+'==')

撰写回答