如何在处理后将数据转换urllib.urlencode为dict?
urllib.urldecode不存在.
Ale*_*lli 121
由于该文档的urlencode发言权,
urlparse模块提供函数parse_qs()和parse_qsl(),用于将查询字符串解析为Python数据结构.
(在较旧的Python版本中,它们在cgi模块中).所以,例如:
>>> import urllib
>>> import urlparse
>>> d = {'a':'b', 'c':'d'}
>>> s = urllib.urlencode(d)
>>> s
'a=b&c=d'
>>> d1 = urlparse.parse_qs(s)
>>> d1
{'a': ['b'], 'c': ['d']}
Run Code Online (Sandbox Code Playgroud)
原始字典d与"往返" 字典之间的明显区别在于d1后者将(单项,在这种情况下)列表作为值 - 这是因为查询字符串中没有唯一性保证,这可能很重要在你的应用程序中了解为每个键提供了多个值(也就是说,列表并不总是单项的;-).
作为备选:
>>> sq = urlparse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
Run Code Online (Sandbox Code Playgroud)
你可以获得一系列对(urlencode也接受这样的参数 - 在这种情况下它保留了顺序,而在dict情况下则没有保留顺序;-).如果您知道没有重复的"密钥",或者不关心是否存在,那么(如我所示)您可以调用dict以获取具有非列表值的字典.但一般情况下,你需要考虑你想要做的,如果重复什么是存在(Python没有决定代表你;-).
pho*_*bie 17
Alex的解决方案的Python 3代码:
>>> import urllib.parse
>>> d = {'a':'b', 'c':'d'}
>>> s = urllib.parse.urlencode(d)
>>> s
'a=b&c=d'
>>> d1 = urllib.parse.parse_qs(s)
>>> d1
{'a': ['b'], 'c': ['d']}
Run Code Online (Sandbox Code Playgroud)
替代方案:
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
Run Code Online (Sandbox Code Playgroud)
parse_qsl是可逆的:
>>> urllib.parse.urlencode(sq)
'a=b&c=d'
Run Code Online (Sandbox Code Playgroud)
And*_*ell 16
urllib.unquote_plus()做你想要的.它用单字符等效替换%xx转义符,并用空格替换加号.
例:
unquote_plus('/%7Ecandidates/?name=john+connolly')
Run Code Online (Sandbox Code Playgroud)
产量
'/~candidates/?name=john connolly'.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44475 次 |
| 最近记录: |