我正在寻找包装的一种简单的方法/拆包数据结构在网络上发送发送列表/字典通过网络蟒蛇:</p> <p>在客户端只发送前:
a = ((1,2),(11,22,),(111,222))
message = pack(a)
和然后在服务器上:
a = unpack(message)
有没有可以打包/解包魔法的图书馆? 在此先感谢
我正在寻找包装的一种简单的方法/拆包数据结构在网络上发送发送列表/字典通过网络蟒蛇:</p> <p>在客户端只发送前:
a = ((1,2),(11,22,),(111,222))
message = pack(a)
和然后在服务器上:
a = unpack(message)
有没有可以打包/解包魔法的图书馆? 在此先感谢
看起来像JSON可能适合该法案。这很简单,并it's in the Python standard library。
它可能不是太高兴的元组,虽然:
>>> 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]]
无论这是一个问题你来决定。
见pickle - Python的对象序列化:
的
pickle
模块实现了序列化和反序列化Python对象结构的根本,但强大的算法。 “Pickling”是将Python对象层次结构转换为字节流的过程,“unpickling”是相反的操作,即字节流转换回对象层次结构。酸洗(或取消)也称为“序列化”,“编组”或“扁平化”,但为了避免混淆,此处使用的术语是“酸洗”和“取消”。
警告:如果你不信任发件人,请不要使用泡菜。 – cobbal 2010-04-01 17:45:23
因为cobbal说,pickle对于网络通信来说几乎总是错误的。从腌制文件:'警告:腌制模块不是为了防止错误或恶意构建的数据。切勿取消接收来自不可信或未经认证的信息源的数据。“鉴于在客户端 - 服务器通信中,几乎不可能知道客户端是您的想法,软件方面,这个答案根本不对。 (有特殊的例外情况,比如只有一个人可以连接,并且你知道他是谁,那种事情)。 – 2010-04-01 17:52:48
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))
以较低的速度作为权衡:https://gist.github.com/3134391 – schlamar 2012-12-20 14:01:29
谢谢。看起来像我需要的。 – facha 2010-04-01 17:45:04
+1:JSON甚至YAML绝对是一种方式。 YAML将保持元组不变为序列化列表,但它不是标准包。对于应该是人类可读的东西(比如配置文件),我肯定会去YAML。 – van 2010-04-01 17:52:24
@van不,YAML不能将元组保留为元组而不使用不安全标签。使用不安全标签对于网络通信来说是一个可怕的想法,因为腌菜就是这样。除了少数例外。而且,实际上,如果您要在YAML中使用特定于语言和不安全的标记,那么YAML会如何使用pickle? – 2010-04-01 17:57:58