Jak mogę przekonwertować dane po przetworzeniu urllib.urlencode
na dyktowanie?
urllib.urldecode
nie istnieje.
Jak docs do urlencode
powiedzenia,
Moduł urlparse udostępnia funkcje parse_qs () i parse_qsl (), które są używane do analizowania ciągów zapytań w struktury danych Pythona.
(W starszych wersjach Pythona znajdowały się w cgi
module). Na przykład:
>>> 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']}
Oczywistą różnicą między oryginalnym słownikiem d
a słownikiem „w obie strony” d1
jest to, że ten drugi ma (w tym przypadku pojedynczy element) listy jako wartości - to dlatego, że nie ma gwarancji unikalności w ciągach zapytań i może to być ważne do swojej aplikacji, aby dowiedzieć się, jakie wartości zostały podane dla każdego klucza (to znaczy, że listy nie zawsze będą zawierały pojedyncze pozycje ;-).
Jako alternatywa:
>>> sq = urlparse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
można uzyskać ciąg par (urlencode też akceptuje taki argument - w tym przypadku zachowuje porządek, podczas gdy w przypadku dyktowania nie ma porządku do zachowania ;-). Jeśli wiesz, że nie ma zduplikowanych „kluczy” lub nie obchodzi cię, czy istnieją, to (jak pokazałem) możesz wywołać dict
słownik z wartościami spoza listy. Ogólnie jednak musisz zastanowić się, co chcesz zrobić, jeśli istnieją duplikaty (Python nie decyduje o tym w Twoim imieniu ;-).
urllib
module. Zobacz odpowiedź @phobie.Kod Python 3 dla rozwiązania Alexa:
>>> 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']}
Alternatywa:
>>> sq = urllib.parse.parse_qsl(s) >>> sq [('a', 'b'), ('c', 'd')] >>> dict(sq) {'a': 'b', 'c': 'd'}
parse_qsl jest odwracalne:
>>> urllib.parse.urlencode(sq) 'a=b&c=d'
źródło
urllib.unquote_plus()
robi co chcesz. Zastępuje znaki ucieczki% xx ich jednoznakowym odpowiednikiem i zastępuje znaki plus spacjami.Przykład:
unquote_plus('/%7Ecandidates/?name=john+connolly')
plony
'/~candidates/?name=john connolly'.
źródło