¿Cómo puedo convertir los datos después de procesar urllib.urlencode
a dict? urllib.urldecode
no existe.Python, función opuesta urllib.urlencode
Respuesta
Como the docs para urlencode
decir,
El módulo proporciona los urlparse funciones parse_qs() y (parse_qsl) que se utilizan para analizar las cadenas de consulta en las estructuras de datos de Python.
(En versiones anteriores de Python, estaban en el módulo cgi
). Así, por ejemplo:
>>> 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 diferencia obvia entre el diccionario originales d
y la "ronda disparada" uno d1
es que esta última tiene (de un solo punto, en este caso) listas como valores - esto se debe a que no existe una garantía de exclusividad en las cadenas de consulta, y puede ser importante para su aplicación saber qué valores múltiples se han otorgado para cada clave (es decir, las listas no siempre serán de un solo elemento ;-).
Como alternativa:
>>> sq = urlparse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
puede obtener una secuencia de pares (urlencode acepta tal argumento, también - en este caso se preserva el orden, mientras que en el caso dict no hay fin de preservar; -). Si sabe que no hay "claves" duplicadas, o no le importa si las hay, entonces (como he demostrado) puede llamar al dict
para obtener un diccionario con valores que no sean de lista. En general, sin embargo, debe considerar lo que desea hacer si los duplicados son presentes (Python no decide eso en su nombre ;-).
Python 3 code para la solución de 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']}
La alternativa:
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
parse_qsl es reversible:
>>> urllib.parse.urlencode(sq)
'a=b&c=d'
urllib.unquote_plus() hace lo que quiere. Reemplaza% xx escapes por su equivalente de un solo carácter y reemplaza los signos más con espacios.
Ejemplo: unquote_plus ('/% 7Ecandidates /? Name = john + connolly') produce '/ ~ candidates /? Name = john connolly'.
- 1. SQL - ¿Hay una función UNION opuesta pero equivalente?
- 2. ¿Hay una función opuesta a preventDefault() en JavaScript?
- 3. Expresión regular opuesta
- 4. Terminología opuesta a la comentada
- 5. ¿Hay una función opuesta a la función de corte en Ruby?
- 6. Python: urllib2.urlopen (url, datos) ¿Por qué tienes que urllib.urlencode() los datos?
- 7. Interfaz de Python con PayPal - urllib.urlencode caracteres no ASCII que fallan
- 8. En Emacs, ¿cuál es la función opuesta de other-window (C-x o)?
- 9. python: función slow timeit()
- 10. Función super() de Python
- 11. Python función anidada alcances
- 12. Función de rango Python
- 13. función raw_input en Python
- 14. función anidada en Python
- 15. Python socket.sendall() función
- 16. función ".format" de python
- 17. Python - Pasar una función a otra función
- 18. Parámetros de la función - Python
- 19. función gamma incompleta en python?
- 20. función de fondo en Python
- 21. Pointfree combinación función en Python
- 22. Python composición de la función
- 23. llamada función anidada en Python
- 24. Herencia de Python: cómo deshabilitar una función
- 25. ¿Cómo funciona este código de función python?
- 26. Función de creación de nombres de Python
- 27. usando la función inet_ntoa en Python
- 28. Python equivalente a la función LINQ All?
- 29. función de estilo MATLAB find() en Python
- 30. C++ equivalente a la función Python len()?
Alex Martelli, ¡gracias! – Artyom
@Derek, ¡de nada! –
Respuesta muy completa. ¡Increíble! –