2016-04-29 49 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()是另一種選擇,但我相信這只是複雜的東西。