Antworten:
Da die Dokumentation für urlencode
sagen wir,
Das urlparse-Modul bietet die Funktionen parse_qs () und parse_qsl (), mit denen Abfragezeichenfolgen in Python-Datenstrukturen analysiert werden.
(In älteren Python-Versionen befanden sie sich im cgi
Modul). Also zum Beispiel:
>>> 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']}
Der offensichtliche Unterschied zwischen dem ursprünglichen Wörterbuch d
und dem "Round-Triped" -Wörterbuch d1
besteht darin, dass das letztere (in diesem Fall ein einzelnes Element) Listen als Werte enthält. Dies liegt daran, dass Abfragezeichenfolgen keine Eindeutigkeitsgarantie enthalten und möglicherweise wichtig sind in Ihrer App, um zu erfahren, welche Mehrfachwerte für jeden Schlüssel angegeben wurden (dh, die Listen sind nicht immer Einzelelemente ;-).
Als Alternative:
>>> sq = urlparse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
Sie können eine Folge von Paaren erhalten (Urlencode akzeptiert auch ein solches Argument - in diesem Fall wird die Reihenfolge beibehalten, während im Diktatfall keine Reihenfolge beibehalten werden muss ;-). Wenn Sie wissen, dass es keine doppelten "Schlüssel" gibt, oder wenn es Ihnen egal ist, können Sie (wie ich gezeigt habe) anrufen dict
, um ein Wörterbuch mit Nicht-Listenwerten zu erhalten. Im Allgemeinen jedoch, tun Sie müssen sich überlegen , was Sie tun wollen , wenn Duplikate sind vorhanden (Python entscheiden nicht , dass in Ihrem Namen ;-).
urllib
Modul. Siehe @ phobie Antwort.
Python 3-Code für Alex 'Lösung:
>>> 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']}
Die Alternative:
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
parse_qsl ist reversibel:
>>> urllib.parse.urlencode(sq)
'a=b&c=d'
urllib.unquote_plus()
macht was du willst. Es ersetzt% xx-Escapezeichen durch ihre Einzelzeichenäquivalente und ersetzt Pluszeichen durch Leerzeichen.
Beispiel:
unquote_plus('/%7Ecandidates/?name=john+connolly')
ergibt
'/~candidates/?name=john connolly'.