python:通过网络发送列表/字典
我在找一种简单的方法来打包和解包数据结构,以便通过网络发送:
在客户端发送之前:
a = ((1,2),(11,22,),(111,222))
message = pack(a)
然后在服务器上:
a = unpack(message)
有没有什么库可以帮我实现打包和解包的功能?谢谢!
3 个回答
1
ast.literal_eval()
这个函数可以保留元组的结构:
>>> a = ((1,2),(11,22,),(111,222))
>>> s = repr(a)
>>> import ast
>>> ast.literal_eval(s)
((1, 2), (11, 22), (111, 222))
2
看看 pickle - Python 对象序列化:
pickle
模块实现了一种基本但强大的算法,用于将 Python 对象结构进行序列化和反序列化。“Pickling”就是把一个 Python 对象的层级结构转换成一串字节流的过程,而“unpickling”则是把这串字节流再转换回对象层级结构的过程。Pickling(和 unpickling)也可以叫做“序列化”、“编组”或者“扁平化”,不过为了避免混淆,这里我们使用“pickling”和“unpickling”这两个词。
12
看起来JSON可能是个不错的选择。它很简单,而且在Python的标准库里就有。
不过,它可能对元组不太友好:
>>> import json
>>> a = ((1,2),(11,22,),(111,222))
>>> print a
((1, 2), (11, 22), (111, 222))
>>> message = json.dumps(a)
>>> message
'[[1, 2], [11, 22], [111, 222]]'
>>> b = json.loads(message)
>>> b
[[1, 2], [11, 22], [111, 222]]
这是否会成为问题,就要看你自己怎么决定了。