Python的函数urllib.urlencode如何使用?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (313)

如何将数据处理后转换urllib.urlencode为目录?urllib.urldecode不存在。

提问于
用户回答回答于

由于该文档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']}

原来的目录之间的明显区别d以及“往返式操作”一个d1是,后者有(单项目,在这种情况下)的列表作为值-这是因为在查询字符串没有唯一性保证,它可能是重要的到应用程序,以了解每个键有多个值(也就是说,这些列表并不总是单项的;-)。

作为替代办法:

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

你可以得到一系列对(urlencode也接受这样一个参数 - 在这种情况下,它保留了顺序,而在dict的情况下,没有命令来保存)。如果你知道没有重复的“密钥”,或者不在意是否存在,那么(如我所示),你可以调用dict获得一个非列表值的字典。但一般情况下,你需要考虑你想要做的,如果重复什么存在(Python没有决定代表你)。

用户回答回答于

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

另一种选择:

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

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励