我正在尋找包裝的一種簡單的方法/拆包數據結構在網絡上發送發送列表/字典通過網絡蟒蛇:</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