Сериализация объекта Python в исходный код Python - PullRequest
5 голосов
/ 23 декабря 2010

У меня есть словарь Python, который я хотел бы сериализовать в исходный код Python, необходимый для инициализации ключей и значений этого словаря.

Я ищу что-то вроде json.dumps(), но формат вывода должен быть Python, а не JSON.

Мой объект очень прост: это словарь, значения которого имеют одно из следующих значений:

  1. литералы встроенного типа (строки, целые и т. Д.)
  2. списки литералов

Я знаю, что могу создать его сам, но я подозреваю, что есть угловые случаи, включающие вложенные объекты, экранирование ключевых слов и т. Д., Поэтому я предпочел бы использовать существующую библиотеку с уже проработанными кинками.

Ответы [ 3 ]

3 голосов
/ 23 декабря 2010

В самом общем случае невозможно вывести произвольный объект Python в исходный код Python. Например. если объект является сокетом, воссоздание того же самого сокета в новом объекте не может работать.

Как объясняет aix, для простого случая repr явно предназначен для создания воспроизводимых исходных представлений. В качестве небольшого обобщения модуль pprint позволяет выборочную настройку с помощью класса PrettyPrinter .

Если вы хотите, чтобы он был еще более общим, и если ваше единственное требование - получение исполняемого исходного кода Python, я рекомендую выделить объект в строку, а затем сгенерировать исходный код

obj = pickle.loads(%s)

, где %s замещается repr(pickle.dumps(obj)).

2 голосов
/ 23 декабря 2010

repr(d) где d - ваш словарь может быть началом (хотя и не решает все проблемы, о которых вы упомянули).

0 голосов
/ 23 декабря 2010

Вы можете использовать yaml

http://pyyaml.org/

YAML не сериализуется ТОЧНО в исходный код Python. Но модуль yaml может напрямую сериализовать и десериализовать объекты Python. Это расширенный набор JSON.

Что именно вы пытаетесь сделать?

...