Python 如何将两个字符串转换为一个列表?
我正在做一些串行通信的事情,当传输数据时,缓冲区经常被分成几个部分 我正在传输一个10个整数的列表,我有一个while循环来不断地读取串行数据。可能是这样的:Python 如何将两个字符串转换为一个列表?,python,string,list,python-3.x,serial-port,Python,String,List,Python 3.x,Serial Port,我正在做一些串行通信的事情,当传输数据时,缓冲区经常被分成几个部分 我正在传输一个10个整数的列表,我有一个while循环来不断地读取串行数据。可能是这样的: b'' b'x[-' b'384,-368,-304,-96,0,-112,-352,256,304,640]' b'' b'' b'None' b'y[608,5' b'' b'60,432,-1120,-1568,272,432,64,192,256]' b'' b'' b'None' 产生此输出的循环是(ser是一个Serial对
b''
b'x[-'
b'384,-368,-304,-96,0,-112,-352,256,304,640]'
b''
b''
b'None'
b'y[608,5'
b''
b'60,432,-1120,-1568,272,432,64,192,256]'
b''
b''
b'None'
产生此输出的循环是(ser
是一个Serial
对象):
列表之间的字符串数(我知道它们是字节,但无论如何)以及是b”“
还是b“None”
都是随机的
所以我的问题是如何生成两个列表,如:
[-384,-368,-304,-96,0,-112,-352,256,304,640]
[608,5,60,432,-1120,-1568,272,432,64,192,256]
根据上面的示例输入。我用嵌套的if
s和正则表达式做了很多尝试,但都没有成功
非常感谢您的帮助。也许您可以在读取字符串对象时保存读取的数据,当您检测到数组的最后一个字符时,例如
]
或无可以使用拆分
或其他工具处理此字符串以提取您的数字
与第一种方法或示例类似,首先:
string = 'x[-384,-368,-304,-96,0,-112,-352,256,304,640]'
numbers = string.split(',')
numbers[0] = numbers[0][2:]
numbers[len(numbers)-1] = numbers[len(numbers)-1][:-1]
ns = [int(n) for n in numbers]
你将有:
[-384,-368,-304,-96,0,-112,-352,256,304,640]
也许您可以在读取字符串对象时保存读取的数据,当您检测到数组的结尾时,例如]
或无可以使用拆分或其他工具处理此字符串以提取您的数字
与第一种方法或示例类似,首先:
string = 'x[-384,-368,-304,-96,0,-112,-352,256,304,640]'
numbers = string.split(',')
numbers[0] = numbers[0][2:]
numbers[len(numbers)-1] = numbers[len(numbers)-1][:-1]
ns = [int(n) for n in numbers]
你将有:
[-384,-368,-304,-96,0,-112,-352,256,304,640]
您可以使用re.findall()
查找所有整数:
import re
while True:
bytesToRead = ser.inWaiting()
s = ser.read(bytesToRead)
lst = re.findall(r'\-?\d+', s)
if lst:
print(lst)
您可以使用re.findall()
查找所有整数:
import re
while True:
bytesToRead = ser.inWaiting()
s = ser.read(bytesToRead)
lst = re.findall(r'\-?\d+', s)
if lst:
print(lst)
由于您处理的是字节而不是字符串(不同的数据类型),因此我建议您使用以下代码(类似于Kasramvd的解决方案,但略有更改):
测试:
由于您处理的是字节而不是字符串(不同的数据类型),因此我建议您使用以下代码(类似于Kasramvd的解决方案,但略有更改):
测试:
这很有用,但它仍然不能回答我的问题。如果列表在一行中,我知道怎么做。我要做的是从两个或更多的字符串构造一个列表。问题的核心是输入是不一致的,所以在很多点上可能会失败,我试图做的是一个对这些不一致具有鲁棒性的算法。这很有用,但它仍然不能回答我的问题。如果列表在一行中,我知道怎么做。我要做的是从两个或更多的字符串构造一个列表。问题的核心是输入是不一致的,所以在很多点上可能会失败,我想做的是一个对这些不一致有鲁棒性的算法。好吧,但是如果ex.x被分成两个字符串呢?现在我有了第二个列表,它没有任何符号表示它应该去哪里,我不知道是将它附加到x还是y。我的问题是如何将两个单独的字符串转换为一个列表。@JanekMuria…在这种情况下,使用更新的CodeOK中所示的extend
方法创建一个通用列表来保存从lst
捕获的所有整数,但是如果for ex.x被拆分为两个字符串呢?现在我有了第二个列表,它没有任何符号表示它应该去哪里,我不知道是将它附加到x还是y。我的问题是如何将两个单独的字符串转换为一个列表。@JanekMuria…在这种情况下,使用更新后的代码中所示的extend
方法,创建一个常规列表来保存从lst
捕获的所有整数
>>> list_of_integers = []
>>> s1 = b'384,-368,-304,-96,0,-112,-352,256,304,640]'
>>> lst = re.findall(b'\-?\d+', s1)
>>> if lst:
list_of_integers.extend(lst)
>>> list_of_integers
[b'384', b'-368', b'-304', b'-96', b'0', b'-112', b'-352', b'256', b'304', b'640']
>>> s2 = b'60,432,-1120,-1568,272,432,64,192,256]'
>>> lst = re.findall(b'\-?\d+', s2)
>>> if lst:
list_of_integers.extend(lst)
>>> list_of_integers
[b'384', b'-368', b'-304', b'-96', b'0', b'-112', b'-352', b'256', b'304', b'640', b'60', b'432', b'-1120', b'-1568', b'272', b'432', b'64', b'192', b'256']
>>>
>>> s3 = b'None'
>>> lst = re.findall(b'\-?\d+', s3)
>>> if lst:
list_of_integers.extend(lst)
>>> list_of_integers
[b'384', b'-368', b'-304', b'-96', b'0', b'-112', b'-352', b'256', b'304', b'640', b'60', b'432', b'-1120', b'-1568', b'272', b'432', b'64', b'192', b'256']