将Python对象序列化为Python源代码
我有一个Python字典,想把它转换成Python源代码,这样就可以用来初始化这个字典的键和值。
我在找类似于json.dumps()
的东西,但输出格式要是Python,而不是JSON。
我的对象很简单:它是一个字典,里面的值可以是以下几种:
- 内置类型的字面量(比如字符串、整数等)
- 字面量的列表
我知道我可以自己写一个,但我觉得可能会有一些特殊情况,比如嵌套对象、关键字转义等等,所以我更希望能用一个现成的库,这样那些问题就已经解决了。
3 个回答
0
你可以使用yaml。
YAML并不是完全和Python源代码一模一样的格式。不过,yaml模块可以直接把Python对象转换成yaml格式,也可以把yaml格式的数据转换回Python对象。YAML其实是JSON的一种扩展。
你到底想要做什么呢?
2
repr(d)
是一个不错的起点,其中 d
是你的字典(dictionary)。不过,这个方法并不能解决你提到的所有问题。
3
在最一般的情况下,不能把任意的Python对象直接转换成Python源代码。比如说,如果这个对象是一个socket(套接字),那么在新的对象中重新创建这个socket是行不通的。
正如aix所解释的,对于简单的情况,repr
这个函数是专门设计用来生成可以复现的源代码表示的。稍微扩展一下,pprint模块通过PrettyPrinter类允许你进行选择性的自定义。
如果你想要更通用的方式,并且你的唯一需求是得到可执行的Python源代码,我建议把对象用pickle模块转换成一个字符串,然后生成源代码。
obj = pickle.loads(%s)
在这里,%s
会被替换成repr(pickle.dumps(obj))
的结果。