从Python 2迁移到Python 3

问题描述 投票:-3回答:1

我正在尝试将项目从Python 2迁移到Python 3.为此,我使用了2to3.exe。它使大部分事情都正确。

但我真正的问题是:

1. Data is stored by Python 2 Code. This data is very huge and I can't change it.
2. While reading this data in Python 3 getting error for marshalling and text data. 

对于文本,我们可以使用latin-1解码函数吗?

马歇尔蛋:

Python 2代码

import marshal
ad = {'a': 2319, 'b': '1', 'c': '1'}
marshalled_data = marshal.dumps(ad)
#'{t\x01\x00\x00\x00ai\x0f\t\x00\x00t\x01\x00\x00\x00ct\x01\x00\x00\x001t\x01\x00\x00\x00bR\x02\x00\x00\x000'

Python 3代码

import marshal
marshalled_data = b'{t\x01\x00\x00\x00ai\x0f\t\x00\x00t\x01\x00\x00\x00ct\x01\x00\x00\x001t\x01\x00\x00\x00bR\x02\x00\x00\x000'
ad = marshal.loads(marshalled_data)

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
ValueError: bad marshal data (unknown type code)

目前我没有看到任何选项在Python 3代码库中编组读取python 2数据。有没有人参与其中?

如果提供任何指针用于进一步调查,将会非常有帮助。

python python-3.x python-2.7 marshalling python-unicode
1个回答
0
投票

今天我得到了编组解决方案如下:

from pwnypack import marshal
atext = b'{t\x01\x00\x00\x00ai\x0f\t\x00\x00t\x01\x00\x00\x00ct\x01\x00\x00\x001t\x01\x00\x00\x00bR\x02\x00\x00\x000'
marshal.marshal_loads(atext, origin={'version': 27})

atext是由Python2.7版本的marshal.dumps生成的字符串

不知道其中的任何其他含义。但它解决了有问题的问题。

© www.soinside.com 2019 - 2024. All rights reserved.