2016-04-29 42 views
1

我能够使用urlsplit解析网址,并使用query参数获取参数。在python中从urlparse返回的分割列表

url'/api/v1/test?par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar'

使用urlsplit和查询后,我得到

'par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar'

而且上面我得到

{'par2': ['val2a=1&val2b=foo&val2c=bar'], 'par1': ['val1']}

运行parse_qs后下面是输出这正是我需要什么

'par1': ['val1']

我得到回报,因为名单已经解码后的数据如下

'par2': ['val2a=1&val2b=foo&val2c=bar]

我可以在&=使用split方法拆分par2,并得到val2a参数之一...

但是有没有更好的方法呢?

+1

请添加您正在解析的“url”。 – AKS

+0

@AKS更新了网址 – user2661518

+0

请检查我的答案。 – AKS

回答

2

您可以在par2

>>> url = '/api/v1/test?par1=val1&par2=val2a%3D1%26val2b%3Dfoo%26val2c%3Dbar' 
>>> q = parse_qs(urlparse(url).query) 
>>> q 
{'par2': ['val2a=1&val2b=foo&val2c=bar'], 'par1': ['val1']} 
>>> parse_qs(q['par2'][0]) 
{'val2b': ['foo'], 'val2c': ['bar'], 'val2a': ['1']} 

值再次使用parse_qs最后的结果后,你可以得到关于=&partitionval2a

1

split值可能是最容易和最有效的方法。

result = {k: v for k, _, v in (pair.partition('=') for pair in values.split('&'))} 
# or 
result = dict(pair.split('=') for pair in values.split('&')) 

使用re.sub()是另一种选择,但我相信这只是复杂的东西。