- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 python 解析从 GSM 调制解调器接收到的消息。
我有很多消息需要解析。我每隔几个小时左右就会收到新消息。
这是我通过使用串行对象到列表 x 中从调制解调器读取数据后收到的数据示例。
AT+CMGL="ALL"
+CMGL: 1,"REC READ","+918884100421","","13/04/05,08:24:36+22"
here's message one
+CMGL: 2,"REC READ","+918884100421","","13/04/05,09:40:38+22"
here's message two
+CMGL: 3,"REC READ","+918884100421","","13/04/05,09:41:04+22"
here's message three
+CMGL: 4,"REC READ","+918884100421","","13/04/05,10:04:18+22"
here's message four
+CMGL: 5,"REC READ","+918884100421","","13/04/05,10:04:32+22"
here's message five
.
.
.
.
.
还有很多消息,我在这里只列出了五个。
我的主要目的是为我收到的每条消息提取消息的内容,例如“这是第一条消息”等。
这是我现在正在使用的代码。
def reading():
print "Reading all the messages stored on SIM card"
phone.write(b'AT+CMGL="ALL"\r')
sleeps()
x=phone.read(10000)
sleeps()
print x
print "Now parsing the message!"
k="".join(x)
parse(k)
k=""
def parse(k):
m = re.search("\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n",k)
print "6="
print m.group(6)
Phone 是我用来从 GSM 调制解调器读取的串行对象。
这里m.group(6)是抓取第一条消息“here's message one”的消息内容
如何让它匹配所有消息的内容,而不仅仅是第一条。
我尝试设置多行标志,但没有用。使用 re.findall() 而不是 re.search() 也没有。
re.search 返回的匹配对象也是不可迭代的。
请帮忙。
最佳答案
为此使用正则表达式不是一个非常可靠的解决方案,因为它无法处理不同电话行为的变化。在您的示例中,响应的格式是
+CMGL: 1,"REC READ","+918884100421","","13/04/05,08:24:36+22"
但其他手机会给出类似的响应
+CMGL: 1,"REC READ","+31612123738",,"08/12/22,11:37:52+04"
注意第四个参数的不同,""
与什么都没有。 checkout 27.005 , 文本模式响应的语法是
+CMGL: <index>,<stat>,<oa/da>,[<alpha>],[<scts>][,<tooa/toda>,<length>]<CR><LF>
<data><CR><LF>
和<alpha>
确实是可选的。是的,编写一个考虑到这一点的正则表达式可能是可能的,但是你会有点徘徊在 two problems land 中。 .
我建议你做的是切换到对响应进行正确的解析,即:从第一个字符开始,并根据预期的参数格式(和存在)以 block 的形式前进。参见 this answer一种快速而肮脏的方法来提取电话号码。它不像我在下面描述的算法那样健壮(例如 comma + 2
假设太多)。
解析响应的绝对正确算法是:
匹配行首的前缀(例如 +CMGL:
)。然后开始解析区分以下标记:
' '
或 '\t'
','
'"'
'\r'
'\n'
对于每个参数,首先忽略任何前导空格。如果得到逗号,则参数不存在,继续解析下一个参数。如果得到回车,下一个字符应该是换行并且到达行尾。如果得到一个非空白非...字符,这是数字参数的开始。收集此参数后面的所有非空白非...字符。在此之后,唯一合法的字符应该是零个或多个空格,后跟逗号或回车。如果获取双引号字符前进到下一个双引号字符,即字符串的末尾(这是安全和正确的,因为即使字符串应包含双引号字符,它们也会被转义但不会转义为 \"
)。在此之后,唯一合法的字符应该是零个或多个空格,后跟逗号或回车。
上面的内容乍一看可能有点让人不知所措,但当你开始处理它时,它实际上并没有那么复杂。
关于python - 在python中解析GSM调制解调器接收到的消息参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848770/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!