Python(pySerial):无法从字符串中修剪/删除CR、LF或意外字符

2024-10-01 09:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我用一个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,所以它可能是我错过的一些简单的东西,但我尝试了几种不同的想法,无法删除多余的字符。在


Tags: and数据importcomstringportascount
3条回答

决定换一种方式。将原始串行数据放入一个列表中,提取温度和湿度读数,然后将它们作为字符串连接在一起:

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))

现在输出如下所示(原始数据然后处理数据):

[b'\n', b'\r\n', b'Read sensor: OK\r\n', b'Hum40.00\r\n', b'TempC21.00\r\n']

H:40.00 T:21.00

现在进入下一阶段。在

不知道为什么rstrip/lstrip不适合您。在

此代码在我的计算机上按预期运行:

s = '\r\nHum40.00\r\n'
print (s.rstrip().lstrip())

我看到的唯一区别是“/n”参数,因此请尝试:

^{pr2}$

一个想法:

所以你现在拥有的是:

"b'Hum40.00\r\n'"

现在我看到的是,'符号现在是字符串的一部分。这意味着'是最后一个符号,而不是\r\n。我发现从外面开始的成功是向内的。我们首先从删除b开始。要执行此操作,请尝试:

^{pr2}$

现在我们应该看到:

"'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"

相关问题 更多 >