Python,相反的函数urllib.urlencode

2024-04-19 15:55:08 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将处理urllib.urlencode后的数据转换为dict? urllib.urldecode不存在


Tags: 数据urllibdicturlencodeurldecode
3条回答

正如{a1}对于{}来说

The urlparse module provides the functions parse_qs() and parse_qsl() which are used to parse query strings into Python data structures.

(在较旧的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']}

原始字典d和“往返”字典d1之间的明显区别在于后者(在本例中为单个项)将列为值,这是因为查询字符串中没有唯一性保证,对于你的应用程序来说,了解每个键的多个值可能很重要(也就是说,列表并不总是单个项;-)

作为替代方案:

>>> sq = urlparse.parse_qsl(s)
>>> sq  
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}

您可以获得一个对序列(urlencode也接受这样一个参数,在本例中它保留顺序,而在dict例中没有要保留的顺序;-)。如果您知道没有重复的“键”,或者不关心是否有重复的“键”,那么(如我所示),您可以调用dict来获取具有非列表值的字典。然而,一般来说,如果复制<现在(Python不为你自己决定),你需要考虑你想做什么。p>

^{}做你想做的事。它用它们的等效单字符替换%xx转义,并用空格替换加号

例如:

unquote_plus('/%7Ecandidates/?name=john+connolly') 

屈服

'/~candidates/?name=john connolly'.

Python 3 code对于Alex的解决方案:

>>> 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']}

备选方案:

>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}

parse_qsl是可逆的:

>>> urllib.parse.urlencode(sq)
'a=b&c=d'

相关问题 更多 >