如何用Python 2.7正确反序列化用2.5序列化的数据?

1 投票
1 回答
651 浏览
提问于 2025-04-17 13:07

我正在把一个网页应用从Python 2.5的运行环境迁移到Python 2.7。我的应用把一些数据以“腌制”(pickled)的方式存储到数据库里,而在解腌制这些数据时,我遇到了一些关于长整型(long integers)的问题:

比如,一个像100003087328067这样的整数,在Python 2.5中腌制后,在Python 2.7中解腌制时却变成了2147483647(这是2的31次方减1)。

我该如何获取正确的值呢?

还有其他问题吗?比如字符串编码方面?(我找到了一些资料,但那是关于Python 3的:在Python 3.1中解腌制Python 2.5腌制的数据,然后用zlib解压

关于我的背景:我正在迁移一个Google App Engine的应用,我使用了一个自定义的db.Property来存储数据,这个属性有点像NDB的PickleProperty。

1 个回答

5

我建议你采用两步走的方式:

首先,写一个Python 2.5的脚本,把当前的值解压缩(unpickle),然后用一种通用的格式,比如JSON,来保存这些值。接着,再把这些值读入到一个Python 2.7的应用程序中。

理想情况下,最好继续使用像JSON这样的格式,而不是使用压缩格式(pickling),这样将来就不依赖于特定的平台了。更好的是,把数据存储在数据库中,按照规范化的数据格式,这样使用起来会更加方便。

撰写回答