前面一片文中python端收到的arduino端来的hello arduino带了开头和结尾的换行符,怎么去掉他们呢?
明确回答这个问题就一句话:使用rstrip()!
Python中rstrip() 的作用是删除 string 字符串末尾的指定字符,默认为空白符,包括空格、换行符、回车符、制表符。所以这个rstrip和VB中我们用得比较多的trim()函数是一个作用,可能还更强大!
既然他可以默认删除字符串末尾的空格换行回车制表符,那么用在我们这里刚好合适。
1、首先来看readline
readin=ser.readline()
readin=readin.rstrip()
print(readin)
输出结果为:
b’hello arduino!’
我们一定还是不满意,前面带了一个b,这个b说明,我们现在取到的是一个字节数组bytes,继续转化为str即可
readin=ser.readline()
x=readin.rstrip()
y=readin.decode("utf-8")
print(y)
那么就输出正常了!输出结果为
hello arduino!
2、再来看看readlines
如果我们前面从串口里通过readlines拿到的是一个list,那么如何对list进行去换行符号呢?通过循环,代码如下:
readIn=ser.readlines()
readIn=[i.rstrip() for i in readIn]
print(readIn)
里面的每个元素都是一个bytes,要得到干净的一个字符串,方法同上面readline的处理。
readIn=ser.readlines()
readIn=[i.rstrip() for i in readIn]
for i in readIn:
print(i.decode("utf-8"))
很显然,经过处理的字符串就没有了换行符了。
3、decode的说明
Python中decode() 方法以 encoding 指定的编码格式解码字符串。默认编码为字符串编码。
当我们通过readlines读取到串口发过来的数据的时候,我们不用着急把他打印出来,实际通过readlines读到的是一个list,那么我们逐个把他们取出来,decode之后就可以显示正常了。
readIn=ser.readlines()
for i in readIn:
print(len(i))
print(i.decode("utf-8"))
注意,没有从list中取出,是不可以直接对list使用解码的。因为decode是给指定的字符串编码格式解码,不是给一个列表解码。