Миграция с Python 2 на Python 3 - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь перенести проект с 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 2 в базе кода Python 3. Кто-нибудь работал над этим?

Будет очень полезно, если будет указатель для дальнейших исследований.

1 Ответ

0 голосов
/ 17 апреля 2019

Сегодня я получил решение для маршаллинга, как показано ниже:

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.dumps версии Python2.7

Не знаю никаких других последствий этого,Но это решило проблему, упомянутую в вопросе.

...