我正在尝试将项目从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数据。有人在做吗?
如果提供任何指针以进行进一步调查,将非常有帮助。
答案 0 :(得分: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是由marshal.python2.7版本的转储生成的字符串
不知道其中有任何其他含义。但这解决了所提到的问题。