如何在python中将任意长的int存储到二进制文件中?

时间:2010-04-14 23:14:14

标签: python

如何在python中的二进制文件中存储和检索数字2 ** 10000而不将其转换为字符串?它可以存储为10,000位吗?

2 个答案:

答案 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

这确实只存储了文件中的数字而没有其他内容。