キーと値のペアとしてフォーマットされた文字列のリストをスペースで区切ります。たとえば、メッセージは次のようになります。Python:フォーマットされた文字列からフィールドを取り出します
"time=2016/06/14 16:44:00.000 level=1 sequenceNum=35 user=Username subject=subject goes here message=This is a message"
キーと値のペアは常にこの順序になり、メッセージは常にこの形式になります。私はこの形で辞書にこの文字列を変換したい:
{'level': 1,
'message': 'This is a message',
'sequenceNum': 35,
'subject': 'subject goes here',
'time': '2016/06/14 16:44:00.000',
'user': 'Username'}
注意するカップルの事:
- 私がすることができ
level
とsequenceNum
は数字ではなく文字列 - になりたいですタイムスタンプのスペース、件名、メッセージはスペースで分けることができません
- メッセージと件名には何かが含まれる可能性がありますので、または等号。しかし、それらは常に文字列の最後と最後の2番目のものになります。文字列
'message='
が含まれている可能性がある件名の問題を解決できれば、件名の終わりとメッセージの開始位置を区別することができませんが、それは素晴らしいことですが、現在はその問題を無視しています。
現在、私が持っている最高のはこれです:
item = {}
item['time'] = message[5:message.index('level=')].strip()
message = message[message.index('level='):]
item['level'] = int(message[6:message.index('sequenceNum=')].strip())
message = message[message.index('sequenceNum='):]
#etc.
私はそれが明らかに正常に動作していても、実際には、このようにしないでください。私は文字列の書式設定に基づいてそれを行うよりエレガントな方法があることを望んでいました。私は、この文字列を作成しようとしていた場合たとえば、私はこれを使用することができます。それは、他の方向にそれを行うことが可能です場合、私は思ったんだけど
"time=%s level=%s sequenceNum=%s user=%s subject=%s message=%s" % (item['time'], item['level'], item['sequenceNum'], item['user'], item['subject'], item['message'])
。 「=」の分割、前の行の最後に各ラベルを残し:
値には何も含めることができますか?これは有効な主題ですか? 'subject = a message =これはmessage = subject = message = 1 = hello'です。値文字列に '= '文字を使用しないでください。 –
@件名とメッセージの@HåkenLidの値には何も含めることができます。残りはより確実に固定されます。はい、あなたの例は有効な主題です。私は '='と件名とメッセージのラベルを扱いたいと思います。私が今無視しようとしているのは、 '' message = "'を含む主題だけです。それはメッセージの始まりと区別することは不可能です。しかし、 '' subject = "'を含むメッセージは、ラベルが固定され、順序付けされているため、管理が容易です。 – ewok
そのばかげたメッセージ形式を思いついた人が解雇されたことを願っています。 –