如何用Python 2.7正确反序列化用2.5序列化的数据?
我正在把一个网页应用从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),这样将来就不依赖于特定的平台了。更好的是,把数据存储在数据库中,按照规范化的数据格式,这样使用起来会更加方便。