我正在使用Arduino从传感器输出Temp & Hum数据,这是由运行Python的PC使用pySerial读取的。数据读入正确,但我想删除CR/LF和意外字符。我在这个网站上找到的一个想法是使用lstrip或lreplace,但它们似乎不能正常工作。他们将删除字符的一个实例,但即使重复一行或创建一个小循环也没有任何效果。
这就是程序打印的内容(在我试着去掉不必要的字符后,最后一行是字符串):
b'\n',b'\r\n',b‘读取传感器:正常\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,所以我可能错过了一些简单的东西,但我尝试了几种不同的想法,无法删除多余的字符。
发布于 2016-04-11 17:02:32
不确定为什么rstrip/lstrip对你不起作用。
这段代码在我的机器上按预期运行:
s = '\r\nHum40.00\r\n'
print (s.rstrip().lstrip())
我看到的唯一区别是"/n“参数,所以试一下:
phraseNew = phraseString.lstrip()
发布于 2016-04-11 21:10:00
决定换一种方式来做这件事。将原始序列数据放入列表中,提取温度和湿度读数,然后将它们连接成一个字符串:
else:
print(msgArray) #Raw serial data
msgString = str(msgArray) #convert serial data to str
character = list(msgString) #str to list
# the next two lines extract the temp & hum readings then converts
them to their respective strings
humidity = ''.join(character[46:51])
temperature = ''.join(character[65:70])
print('H:' + (humidity) + ' T:' + (temperature))
输出现在看起来像这样(Raw then processed ):
b'\n',b'\r\n',b‘读取传感器: OK\r\n',b'Hum40.00\r\n',b'TempC21.00\r\n’
小时:40.00T:21.00
现在进入下一阶段。
发布于 2018-07-27 05:46:29
一种想法是:
因此,您现在拥有的是:
"b'Hum40.00\r\n'"
现在我在这里看到的是‘符号现在是字符串的一部分。这意味着‘是最后一个符号,而不是\r\n。我发现从外部开始向内工作是成功的。我们首先从删除b开始。为此,请尝试:
x = str(ser.readline())
x = x.lstrip("b")
现在我们应该看到这个:
"'Hum40.00\r\n'"
接下来,删除‘
x = x.strip("'")
现在我们看到的是:
"Hum40.00\r\n"
现在这里的棘手部分是删除\r\n。这里有一篇文章:Can't delete "\r\n" from a string解释了原因:
x = x.rstrip("\r\n")
不会起作用。
相反,请键入:
x = x.rstrip("\\r\\n")
最终代码:
x = str(ser.readline())
x = x.lstrip("b")
x = x.strip("'")
x = x.rstrip("\\r\\n")
print(x)
应该是这样的:
"Hum40.00"
https://stackoverflow.com/questions/36543649
复制相似问题