Python:解析String以创建逗号分隔值

时间:2017-03-07 04:58:01

标签: python python-2.7

我有如下字符串,我想解析这个字符串,并将字符串中的=之后的值作为逗号分隔值。

string = "TimeStamp=[2017-03-07 00:22:12.697Z] RequestUri=https://google.com SessionId={null} UserId=8273527 VisitorId= UserAgent=\"Abc Proxy\" SystemType=Connect ClientIp=140.11.135.123 IsTestSystem=False"

预期产出:

'[2017-03-07 00:22:12.697Z]','https://google.com','{null}','8273527','','Abc Proxy','Connect','140.11.135.123','False'

感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

我建议您尝试使用str.split方法:

s = "TimeStamp=[2017-03-07 00:22:12.697Z] RequestUri=https://google.com SessionId={null} UserId=8273527 VisitorId= UserAgent=\"Abc Proxy\" SystemType=Connect ClientIp=140.11.135.123 IsTestSystem=False"
print [i.split("=")[-1] for i in s.split()]

输出:

['[2017-03-07', '00:22:12.697Z]', 'https://google.com', '{null}', '8273527', '', '"Abc', 'Proxy"', 'Connect', '140.11.135.123', 'False']

也许时间戳不是你想要的,所以试试这个:

first_split = s.split("]", 1)
print ["["+first_split[0].split("[")[-1]+"]"] + [i.split("=")[-1] for i in first_split[1].split()]

输出:

['[2017-03-07 00:22:12.697Z]', 'https://google.com', '{null}', '8273527', '', '"Abc', 'Proxy"', 'Connect', '140.11.135.123', 'False']

答案 1 :(得分:0)

您的数据格式不正确,某些值中包含空格,并且您有一些没有值的数据。因此,在纯python中它不会很容易,所以我使用re代替:

>>> import re
>>> re.split(r'\w+\=', string)
['', '[2017-03-07 00:22:12.697Z] ', 'https://google.com ', '{null} ', '8273527 ', ' ', '"Abc Proxy" ', 'Connect ', '140.11.135.123 ', 'False']

您可以使用列表解析添加对空字符串的检查:

>>> [x.strip() for x in re.split(r'\w+\=', string) if x.strip()]
['[2017-03-07 00:22:12.697Z]', 'https://google.com', '{null}', '8273527', '"Abc Proxy"', 'Connect', '140.11.135.123', 'False']

答案 2 :(得分:0)

纯Python方式。它有一个限制,它假设密钥不包含空格(使用正则表达式的答案也有这个限制)。

0 or 1