我用一个Arduino从传感器输出温度和湿度数据,这是由一台运行Python的电脑用pySerial读取的。数据读取正确,但我想删除CR/LF和意外字符。我在这个网站上发现的一个想法是使用lstrip或lreplace,但它们似乎不能正常工作。它们将删除角色的一个实例,但即使重复该行或进行一个小循环也没有效果。在
这是程序打印的内容(在我尝试删除不必要的字符后,最后一行是字符串):
[b'\n', b'\r\n', b'Read sensor: OK\r\n', b'Hum40.00\r\n', b'TempC18.00\r\n']
[" b'Hum40.00\r\n'", " b'TempC18.00\r\n']"]
我的目标是:
[Hum40.00, TempC18.00]
我希望以后可以对消息进行微调。在
代码如下:
import serial as ser
import time
count = 0
msgArray = []
saveMsg = []
ser = ser.Serial('COM16', 9600, timeout=1, parity='N', stopbits=1, bytesize=8, xonxoff=0) # Setting up and opening COM port
ser.close()
ser.open()
def readSerial(): #reads a whole line from COM port
serLine = ser.readline()
return serLine
def sveMsgCut(): #saves the buffer as a message then cuts message
cutMsg = saveMsg
words = cutMsg.split(',')
return words
while True: #main program
dataSerial = readSerial()
if count < 5: #reads COM port 5 times and passes along to buffer msgArray
msgArray.append(dataSerial)
count = count+1
else:
print(msgArray) #~display msgArray
saveMsg = str(msgArray) #convert to string
splitMsg = saveMsg.split(',') #splits string (csv)
phrase = splitMsg[3:5] #cuts out excess either side of Temp & Hum/
phraseString = str(phrase)
phraseNew = phraseString.lstrip("/n") #an attempts ot remove CR
print(phraseNew) #~print adjusted string
saveMsg = msgArray
count = 0 #resets msgArray and counter
msgArray = []
time.sleep(5)
我对编程相当陌生,尤其是Python,所以它可能是我错过的一些简单的东西,但我尝试了几种不同的想法,无法删除多余的字符。在
决定换一种方式。将原始串行数据放入一个列表中,提取温度和湿度读数,然后将它们作为字符串连接在一起:
现在输出如下所示(原始数据然后处理数据):
现在进入下一阶段。在
不知道为什么rstrip/lstrip不适合您。在
此代码在我的计算机上按预期运行:
我看到的唯一区别是“/n”参数,因此请尝试:
^{pr2}$一个想法:
所以你现在拥有的是:
现在我看到的是,'符号现在是字符串的一部分。这意味着'是最后一个符号,而不是\r\n。我发现从外面开始的成功是向内的。我们首先从删除b开始。要执行此操作,请尝试:
^{pr2}$现在我们应该看到:
下一步删除'
现在我们看到了:
现在这里的棘手部分是删除\r\n。这里有一篇文章:Can't delete "\r\n" from a string 这就解释了为什么:
不起作用。在
改为键入:
最终代码:
是否应该:
相关问题 更多 >
编程相关推荐