如何将列表转换为字符串,然后在python中将其转换回来?

时间:2014-03-19 10:03:49

标签: python udp

我想通过UDP / TCP发送一个列表,但由于它们只支持字符串列表,我需要将列表转换为字符串并将其转换回来。

我的清单就像

['S1','S2','H1','C1','D8']

我知道我可以使用

string_ = ''.join(list_) 

将其转换为字符串。

但是如何将其转换回来?

或者还有另一种方法可以使用UDP / TCP发送列表?

4 个答案:

答案 0 :(得分:3)

自定义格式取决于有关列表项格式的假设,因此json看起来是最安全的方式:

>>> import json
>>> data = json.dumps(['S1','S2','H1','C1','D8'])
>>> data
'["S1", "S2", "H1", "C1", "D8"]'
>>> json.loads(data)
[u'S1', u'S2', u'H1', u'C1', u'D8']

答案 1 :(得分:1)

使用分隔符:

string_ = ';'.join(list_)

list_ = string_.split(';')

您需要确保分隔符不在您的字符串中。如果是,您可能需要编码。

答案 2 :(得分:0)

也许您可以在列表元素之间添加一个分隔符,并使用它调用split来获取列表。

修改

正如 @Eric Fortin 在他的回答中提到的那样,分隔符应该是不能在你的字符串中的东西。一种可能性是 - 正如他所建议的 - 使用编码。另一种可能性是逐个发送元素,但这显然会增加通信开销。

请注意,您的分隔符可能是一个序列,它不需要是一个单个字符。

str_list = separator.join(list_)
new_list = str_list.split(separator)

如果你知道列表元素的格式,你甚至可以不使用分隔符!

str_list = "".join(list_)
re.split(reg_exp, str_list)

答案 3 :(得分:0)

如果您在网络通信的两端都有python,则可以使用pickle模块设计中的dumpsloads函数,尤其是序列化python对象:

import pickle

a = ['S1','S2','H1','C1','D8']
string_ = pickle.dumps(a)

...

a = pickle.loads(string_)

@bereal 提出的solution更好,因为大多数编程语言都有json库。但它需要对json不支持的数据类型进行一些处理。

修改

正如@bereal注意到pickle可能存在安全问题,因为它实际上是一种可执行语言。