我正在使用Telit模块(GT864-py),我正在尝试从使用AT命令时收到的返回值/字符串中提取数字。
这是我正在使用的代码示例:
MDM.send('AT#ADC=1,2'+'\r', 5)
pump = MDM.receive(15)
pumpb = int(filter(str.isdigit, pump))
给出了回复
#ADC: 10 (This number can range from ~10-150)
OK
现在,我想在ADC之后过滤数字,但是,我还没有找到解决方案。
通过在PythonWin 1.5.2+中使用此代码,我收到以下错误:
NameError:isdigit
所以我假设Python 1.5.2不支持isdigit,这是正确的吗?如果是这样,有没有人知道在#ADC:xxx后提取数字的其他方法?
答案 0 :(得分:2)
Python 1.5.2p2 documentation可在线获取。实际上,isdigit
或模块string
中都没有str
。
即使在Python 1.5中,str
也是一个支持in
操作的序列,所以你可以这样做:
def isdigit(c):
return c in '0123456789'
pumpb = int(filter(isdigit, pump))
为了更彻底的解析,我会使用正则表达式,而不是模块re
;代码
import re
match = re.search('#ADC:\s*(\d+)', pump)
if match:
number = match.group(1)
这将匹配#ADC:
后跟任意数量的空格,后跟一个或多个数字[0-9]
;数字会在1
组中捕获,如果找到匹配项,则会将其值存储到number
。
答案 1 :(得分:0)
如果字符串始终是"#ADC: "
,那么简单的字符串切片也应该有效:
if pump[:6] == '#ADC: ':
pumpb = int(pump[6:])