使用cPickle saved变量保存长字符串将被截断

2024-06-16 11:48:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我将一个长度为480710171的0和1字符串转储到pickle文件中,因为我以前在bitarray中遇到过问题,并且想看看pickle是否可以解决我的问题。但是现在它的长度是285175。在

为什么?在

我想看看泡菜有没有什么限制,但我没有发现任何东西。。。如果有一个众所周知的原因,我可能没有使用正确的关键词。。。在

编辑:

您可以填充一个随机值的字符串b,这样您就可以使用您喜欢的技术得到480710171的长度,也许类似于一个简单的for循环,指向480710171。我个人使用哈夫曼编码加密原始数据,但这将是一个很长的例子,我觉得在这里没有必要。 然后,我将字符串b转储如下:

b = ""
for i in range(4807100171)
    b += 0

import cPickle as pickle
pickle.dump(b, open("string.p", "wb"), pickle.HIGHEST_PROTOCOL)

Tags: 文件字符串in编辑编码for原始数据原因
1条回答
网友
1楼 · 发布于 2024-06-16 11:48:35

这显然是一个整数溢出问题-请注意480710171减2**32等于512132875。不幸的是,二进制pickle格式表示字符串长度的方式是32位整数。使用文本pickle格式(协议版本0)似乎可以避免此问题,但是文本pickle通常较长,并且处理这种大小的字符串需要相当多的内存。我还没有真正测试过这个-我觉得我的电脑内存都不够用!在

如果这一个字符串是唯一被存储的东西,那么将字符串本身写入文件会简单得多。在

相关问题 更多 >