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
.
.
.
.
.
他にもたくさんのメッセージがありますが、ここでは 5 つだけ挙げました。
私の主な意図は、メッセージの内容を抽出することです。たとえば、受信したすべてのメッセージについて、「ここにメッセージ 1 があります」などです。
これが私が今使っているコードです。
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.search() の代わりに re.findall() を使用することもありませんでした。
また、re.search によって返される一致オブジェクトは反復可能ではありません。
助けてください。