Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从串行端口数据过滤输入_Python_Regex_Serial Port_Input Filtering - Fatal编程技术网

Python 从串行端口数据过滤输入

Python 从串行端口数据过滤输入,python,regex,serial-port,input-filtering,Python,Regex,Serial Port,Input Filtering,我对Python非常陌生,需要您的帮助。 我制作了一个小程序,从串口读取模拟信号并将其转储到文件中。但是,即使读取非常精确,有时也会将不必要/未确定的字符转储到文件中: 这是一个500行文件的转储;检查第二个值: 466 þ466 466 466 所以,基本上问题是我不知道如何从读数中过滤这些输入。我一直在阅读正则表达式部分的文档,但是我不能正确地处理/操纵结果。正如您所见,“purifystring”函数非常不完整 import serial import re #this is the p

我对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;
导入序列号
进口稀土
#这就是痛苦。。。
def purifystring(字符串):
regobj=re.match(“^([0-9]+)$”)
结果=regobj.find(字符串)
#以9600波特率在ttyACM0上启动监控
ser=serial.serial('/dev/ttyACM0',9600)
#转储文件
文件名='output.txt'
#将数据保存到文件
f=打开(文件名为“w”)
计数器=0;
当计数器<500时:
analogvalue=ser.readline()
#在写入文件之前需要清除输入。。。
#purifystring(模拟值)
#输出到控制台(调试)
f、 写入(模拟值)
计数器+=1
f、 关闭()
将“写入的”+str(计数器)+行打印到“+文件名”;
因此,尽管这可能不是最好的方法,我还是愿意接受建议。我试图使输出文件的每行值在0到1023之间。我从读取序列中获得的数据是一个类似“812\n”的字符串


提前谢谢

要以简单的方式制作作业(即不使用正则表达式),请尝试以下操作:

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()匹配,然后将结果连接到“自身”上,对吗?另一方面,我忘了提到,我不能只返回有效数字,因为它必须是有效的“结果”。更准确地说:我将从这些数据中生成一个图表,因此在尝试了您所说的(有效)之后,我发现了一些损坏的数据值,如778、778、7780、778(第三次检查),这可能是由于过滤了错误的输入,如778、77ª8、778?@Tobias:当我在“77ª8”上尝试isdigit()循环时,我得到的是778,而不是7780,它应该是其他的东西,但如果它们也是由数字组成的,那么检测不良输入就会困难得多。。。