2013-10-07 12 views
5

İki makine arasındaki bazı değişkenlerin değerini göndermem gerekiyor ve soketleri kullanarak yapmak niyetindeyim. Verilerin doğru şekilde iletildiğinden emin olmak için md5 karma algoritmasını, gönderdiğim veriler için bir sağlama toplamı olarak kullanıyorum. Md5 hash algoritmasını gerçekleştirmek için verileri baytlara dönüştürmem gerekiyor. Hem değişkenin adını hem de değerini iletmek istiyorum. Çok fazla değişkenim olduğu için sözlük kullanıyorum.Sözlükü baytlara ve tekrar python'a dönüştürün?

Bu gibi bir şeyi baytlara dönüştürmek istiyorum? Başka bir deyişle

variables = {'var1' : 0, 'var2' : 'some string', 'var1' : ['listitem1','listitem2',5]} 

Ben sırayla onları birden farklı veri türleri vardır ve ben bayt içine dönüştürmek istediğiniz listeleri dahil olmak üzere, içinde farklı veri türlerinin bir sürü bir sözlük var. Ardından alıcı makinede bu baytları bir sözlüğe dönüştürün.

Birkaç farklı yöntem denedim json burada (Convert a python dict to a string and back) tavsiye edilir ama bir dize üretmek için ekseyem bayt ile düşünemiyorum.

+4

nasıl soru bağlı birinden farklıdır verecek? "Birkaç farklı yöntem" denediğini söylüyorsun. Bire odaklan. Bize ne denediğini anlat, bize kodunu göster ve senin için neyin işe yaramadığını söyle. –

+0

bir örnek vermemeyi sevdiğim bir – user1205406

+0

A bytestring bayttır. – Marcin

cevap

12

Bu çalışması gerekir:

s=json.dumps(variables) 
variables2=json.loads(s) 
assert(variables==variables2) 
+5

'dumps 'nesneyi" str "değil bayt olarak döker – VicX

7

ikili için sözlüğe dönüştürmek için gerekiyorsa, bir önceki cevapta açıklandığı gibi bir dize (JSON) dönüştürmek gerekir, o zaman ikili dönüştürebilirsiniz . Örneğin

:

my_dict = {'key' : [1,2,3]} 

import json 
def dict_to_binary(the_dict): 
    str = json.dumps(the_dict) 
    binary = ' '.join(format(ord(letter), 'b') for letter in str) 
    return binary 


def binary_to_dict(the_binary): 
    jsn = ''.join(chr(int(x, 2)) for x in the_binary.split()) 
    d = json.loads(jsn) 
    return d 

bin = dict_to_binary(my_dict) 
print bin 

dct = binary_to_dict(bin) 
print dct 

çıkışı

1111011 100010 1101011 100010 111010 100000 1011011 110001 101100 100000 110010 101100 100000 110011 1011101 1111101 

{u'key': [1, 2, 3]} 
İlgili konular