繁体   English   中英

从 Python 2 迁移到 Python 3

[英]Migrating from Python 2 to Python 3

我正在尝试将项目从 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 数据。 有没有人研究过?

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

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

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 生成的字符串

不知道其中的其他含义。 但它解决了问题中提到的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM