¿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. Interfaz de Python con PayPal - urllib.urlencode caracteres no ASCII que fallan
- 7. Python: urllib2.urlopen (url, datos) ¿Por qué tienes que urllib.urlencode() los datos?
- 8. En Emacs, ¿cuál es la función opuesta de other-window (C-x o)?
- 9. Python función anidada alcances
- 10. función raw_input en Python
- 11. Python socket.sendall() función
- 12. python: función slow timeit()
- 13. función anidada en Python
- 14. función ".format" de python
- 15. Función super() de Python
- 16. Función de rango Python
- 17. Python - Pasar una función a otra función
- 18. llamada función anidada en Python
- 19. Pointfree combinación función en Python
- 20. Python composición de la función
- 21. Parámetros de la función - Python
- 22. función de fondo en Python
- 23. función gamma incompleta en python?
- 24. Función de creación de nombres de Python
- 25. Python funciona como un argumento de función?
- 26. ¿Qué significa la función dir() de Python?
- 27. función de impresión python en tiempo real
- 28. Parámetro de función de Python: tuple/list
- 29. Usando la función drawContours OpenCV en Python
- 30. ¿Miembro estático de una función en Python?
Alex Martelli, ¡gracias! – Artyom
@Derek, ¡de nada! –
Respuesta muy completa. ¡Increíble! –