python --解析字符串,并返回xml格式字符串 急急急。
str = """Registrations:
=================================================================================================
Call-ID: 8945da7a7f550c16NWRjZjdmMjhmNWQxYTZlOTJjMDY5YjhiN2RjMDViMWE.
User: 1000@192.168.1.111
Contact: "1000" <1000>1000>
Agent: X-Lite release 1002tx stamp 29712
Status: Registered(UDP)(unknown) EXP(2014-07-23 10:19:00) EXPSECS(2458)
Host: debian
IP: 192.168.1.109
Port: 35838
Auth-User: 1000
Auth-Realm: 192.168.1.111
MWI-Account: 1000@192.168.1.111
Total items returned: 1
================================================================================================="""
这个字符串如何解析成列表,并构造成xml格式字符串。请各位大神注意,这个字符串contact字段中的值有冒号,
------解决方案--------------------
# -*- coding: cp936 -*-
str = """Registrations:
=================================================================================================
Call-ID: 8945da7a7f550c16NWRjZjdmMjhmNWQxYTZlOTJjMDY5YjhiN2RjMDViMWE.
User: 1000@192.168.1.111
Contact: "1000" <1000>1000>
Agent: X-Lite release 1002tx stamp 29712
Status: Registered(UDP)(unknown) EXP(2014-07-23 10:19:00) EXPSECS(2458)
Host: debian
IP: 192.168.1.109
Port: 35838
Auth-User: 1000
Auth-Realm: 192.168.1.111
MWI-Account: 1000@192.168.1.111
Total items returned: 1
================================================================================================="""
lineList = str.split("\n")
dictA = {}
listB = []
for line in lineList:
curLine = line.strip().split(":",1)
if len(curLine) !=2:
continue
key = curLine[0].strip()
value = curLine[1].strip()
if value == "":
continue
dictA[key] = value #你确定你不要字典?
listB.append((key,value))
print dictA
print listB
------解决方案--------------------
import re
from lxml import etree
s = """Registrations:
=================================================================================================
Call-ID: 8945da7a7f550c16NWRjZjdmMjhmNWQxYTZlOTJjMDY5YjhiN2RjMDViMWE.
User: 1000@192.168.1.111
Contact: "1000" <1000>1000>
Agent: X-Lite release 1002tx stamp 29712
Status: Registered(UDP)(unknown) EXP(2014-07-23 10:19:00) EXPSECS(2458)
Host: debian
IP: 192.168.1.109
Port: 35838
Auth-User: 1000
Auth-Realm: 192.168.1.111
MWI-Account: 1000@192.168.1.111
Total items returned: 1
================================================================================================="""
root = etree.Element('root')
data = s.split('\n')
for l in data[:-2]:
m = re.match('^([^:]+):\s+(.*)', l)
if m:
id, info = m.groups()
e = etree.Element(id)
e.text = info
root.append(e)
print etree.tostring(root, pretty_print=True)
记得先安装下 lxml,windows 下可以直接到官网下载安装包;linux 下可以 pip install lxml