从串口数据中过滤输入

时间:2011-11-12 19:24:46

标签: python regex serial-port input-filtering

我对Python非常陌生,我可以使用你的帮助。 我做了一个小程序,从串口读取模拟信号并将其转储到文件中。但是,即使读取非常精确,有时它会将不必要/未确定的字符转储到文件中:

这是来自500行文件的转储;检查第二个值: 466 þ466 466 466

所以,基本上问题是我不知道如何从读数中过滤这个输入。我一直在阅读正则表达式部分中的文档,但我无法正确处理/操作结果。正如你所看到的“purifystring”功能非常不完整......

import serial
import re

#this is the pain...
def purifystring(string):

    regobj = re.match("^([0-9]+)$")
    result = regobj.find(string)

#start monitoring on ttyACM0 at 9600 baudrate
ser = serial.Serial('/dev/ttyACM0', 9600)

#the dump file
filename = 'output.txt'

#save data to file
f = open(filename, 'w')
counter = 0;
while counter < 500:

    analogvalue = ser.readline()

    #need to clean the input before writing to file...
    #purifystring(analogvalue)

    #output to console (debug)
    f.write(analogvalue)

    counter += 1

f.close()

print 'Written '+ str(counter)+' lines to '+filename;

所以尽管这可能不是最好的方法,但我接受了建议。我试图使我的输出文件的每行值为0到1023.我从读取序列得到的数据是一个类似'812 \ n'的字符串。

提前致谢!

1 个答案:

答案 0 :(得分:1)

以简单的方式完成工作(即没有正则表达式;))试试这个:

def purifystring(string_to_analyze):    # string is a really bad variable name as it is a python module's name
   return "".join(digit for digit in string_to_analyze if digit.isdigit())

这样,您只会过滤接收数据的数字。 (isdigit()