我想通过UDP/TCP发送一个列表,但由于它们只支持字符串列表,我需要将列表转换为字符串并将其转换回来。如何将列表转换为字符串,然后将其转换回python?
我的名单就像是
['S1','S2','H1','C1','D8']
我知道我可以使用
string_ = ''.join(list_)
将其转换成字符串。
但如何将其转换回来?
或者还有另一种方法可以使用UDP/TCP发送列表?
我想通过UDP/TCP发送一个列表,但由于它们只支持字符串列表,我需要将列表转换为字符串并将其转换回来。如何将列表转换为字符串,然后将其转换回python?
我的名单就像是
['S1','S2','H1','C1','D8']
我知道我可以使用
string_ = ''.join(list_)
将其转换成字符串。
但如何将其转换回来?
或者还有另一种方法可以使用UDP/TCP发送列表?
也许你可以在列表元素之间附加一个分隔符,然后使用它调用split
来获取列表。
编辑:
由于@Eric福廷在他的回答mentionned,隔板应是一种不能在你的字符串。一种可能性是 - 正如他所建议的 - 使用编码。另一种可能性是逐个发送元素,但这显然会增加通信开销。
请注意,您的分隔符可能是一个序列,它不需要是单个字符。
str_list = separator.join(list_)
new_list = str_list.split(separator)
如果您知道列表元素的格式,您甚至可以不使用分隔符!
str_list = "".join(list_)
re.split(reg_exp, str_list)
使用分隔符:
string_ = ';'.join(list_)
list_ = string_.split(';')
你需要确保的分隔符不能成为你的字符串中。如果是这样,您可能需要编码。
自定义格式将取决于有关列表项格式的假设,所以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']
你的列表是否总是包含字符串,或者它是否可以包含其他类型的对象(如果是,哪些类型)? – NPE
无论你做什么,都不要使用'pickle',因为它不安全:有人发送恶意输入到你的UDP/TCP服务器可能会在你的盒子上运行任意代码。请参阅http://stackoverflow.com/questions/10302247/understanding-python-pickle-insecurity – NPE