我一直致力于使用红外传感器和声波距离传感器的Arduino设置。由于我同时使用这两种方法,因此串口数据需要有来自两个数据集的可识别标签,我使用'厘米'对于声波传感器数据。
我的问题是,我无法弄清楚如何去掉'厘米'来自声波传感器数据的标签:
if ' cm' in data: #used to handle the output from the ultrasonic sensor
sonicdata = [int(s) for s in s.split() if s.isdigit()] #remove text so we can turn it into an integer
if 20<sonicdata <40:
pyautogui.press('playpause')
if sonicdata<19:
pyautogui.press('nexttrack')
当我运行这个时,我收到错误消息&#34; AttributeError:&#39; int&#39;对象没有属性&#39; split&#39;&#34; 我很困惑所以请帮助谢谢
所以它只是那个给我一个错误的部分
如何实际从这里获取数据中的整数?
答案 0 :(得分:0)
对于通用案例,具有split
函数的正则表达式可以在这里提供帮助:
integers = [int(i) for i in re.split(
'(\d+)', 'measures 40 cm by 20 cm by 10 cm')[1::2]]
使用拆分器模式周围的捕获括号,拆分器本身也包含在结果列表中:
>>> import re
>>> re.split('(\d+)', 'measures 40 cm by 20 cm by 10 cm')
['measures ', '40', ' cm by ', '20', ' cm by ', '10', ' cm']
所有奇怪的元素。可以使用[1::2]
:
>>> re.split('(\d+)', 'measures 40 cm by 20 cm by 10 cm')[1::2]
['40', '20', '10']
最后,实际的字符串需要转换为整数,在表达式周围的列表理解中完成:
>>> [int(i) for i in re.split('(?P<int>\d+)', 'measures 40 cm by 20 cm by 10 cm')[1::2]]
[40, 20, 10]