如何在python中的二进制文件中存储和检索数字2 ** 10000而不将其转换为字符串?它可以存储为10,000位吗?
答案 0 :(得分:3)
如果传入协议版本2(“新二进制协议”),内置pickle模块可以执行此操作:
import pickle
pickle.dumps(2**10000, 2)
返回1259字节的字符串。当然,您希望将其正常写入文件,因此请使用pickle.dump(2**10000, file, 2)
答案 1 :(得分:2)
我不清楚你是否一般性地询问如何在二进制文件中存储大整数,或者数字2 ** 10000是否重要。如果它很重要,那么使用超过一千字节来存储它显然是非常浪费的(我可以用8个字符写它!)
我将假设一般情况,但对于初学者,你需要10001位来存储2 ** 10000,而不是10000,所以对于如何处理填充到字节边界所需的额外7位有一个问题在文件中。我只是将它存储在10008位(1251字节)中。此解决方案使用bitstring模块。
from bitstring import BitArray
fout = open('bignumber', 'wb')
a = BitArray(uint=2**10000, length=10008)
a.tofile(fout)
并回读:
the_number = BitArray(filename='bignumber').uint
这确实只存储了文件中的数字而没有其他内容。