Comment puis-je convertir des données après le traitement urllib.urlencode
pour dict? urllib.urldecode
n'existe pas.Python, fonction opposée urllib.urlencode
Répondre
Comme the docs pour urlencode
dire
Le module urlparse fournit les parse_qsl et ( fonctions parse_qs()) qui sont utilisés pour analyser des chaînes de requête dans les structures de données python.
(Dans les anciennes versions de Python, elles se trouvaient dans le module cgi
). Ainsi, par exemple:
>>> 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']}
La différence évidente entre le dictionnaire d
et le « rond-trébuché » un d1
d'origine est que celui-ci a (un seul élément, dans ce cas) listes comme valeurs - C'est parce qu'il n'y a pas de garantie d'unicité dans les chaînes de requête, et il peut être important que votre application sache quelles valeurs ont été données pour chaque clé (c'est-à-dire que les listes ne seront pas toujours individuelles).
Comme alternative:
>>> sq = urlparse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
vous pouvez obtenir une séquence de paires (urlencode accepte un tel argument, aussi - dans ce cas, il conserve l'ordre, alors que dans le cas dict il n'y a pas pour préserver; -). Si vous savez qu'il n'y a pas de "clés" en double, ou que cela ne vous dérange pas, alors (comme je l'ai montré), vous pouvez appeler dict
pour obtenir un dictionnaire avec des valeurs sans liste. En général, cependant, vous devez considérer ce que vous voulez faire si les doublons sont présents (Python ne décide pas en votre nom ;-).
Python 3 code pour la solution d'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']}
L'alternative:
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
parse_qsl est réversible:
>>> urllib.parse.urlencode(sq)
'a=b&c=d'
urllib.unquote_plus() fait ce que vous voulez. Il remplace% xx par leur équivalent à caractère unique et remplace les signes plus par des espaces. Exemple: unquote_plus ('/% 7Ecandidates /? Name = john + connolly') donne '/ ~ candidates /? Name = john connolly'.
- 1. Interface Python à PayPal - urllib.urlencode caractères non-ASCII défaut
- 2. Existe-t-il une fonction opposée de preventDefault() dans JavaScript?
- 3. En .net, existe-t-il une fonction opposée à Server.HTMLEncode()?
- 4. C# couleur opposée
- 5. équivalent Java de pythons urllib.urlencode (URLEncode base HashMap)
- 6. Différence SQL Server (opposée à l'intersection)
- 7. Dans Emacs, quelle est la fonction opposée de other-window (C-x o)?
- 8. Méthode opposée de la puissance mathématique ajoutant des nombres
- 9. fonction d'impression en Python
- 10. fonction python problématique renvoie
- 11. python: fonction timeit() lente
- 12. fonction Python imprime Aucun
- 13. Fonction de recherche Python
- 14. Fonction aléatoire en Python
- 15. fonction Python aide() et la fonction string.title
- 16. japonais dans la fonction python
- 17. python fonction paramètre modèle d'évaluation
- 18. fonction python/django unittest override
- 19. Python triée() fonction clé bizarreries
- 20. Problème avec une fonction Python
- 21. perror fonction équivalente en python
- 22. Python simple erreur de fonction?
- 23. composition de la fonction Python
- 24. Sortir d'une fonction en Python
- 25. Python, rediriger le flux de Popen vers une fonction python
- 26. Python Global Variable: partage entre classe de fonction puis fonction
- 27. Ctypes Python et pointeurs de fonction
- 28. Python: chaînage de la fonction jQuery?
- 29. Autre fonction d'ordre supérieur de python Haskell
- 30. Python - arguments par défaut dans la fonction
Alex Martelli, merci! – Artyom
@Derek, de rien! –
Réponse très complète. Impressionnant! –