Bagaimana cara mengonversi data setelah pemrosesan urllib.urlencode
ke dikt?
urllib.urldecode
tidak ada.
Jawaban:
Sebagai dokumentasi untuk urlencode
mengatakan,
Modul urlparse menyediakan fungsi parse_qs () dan parse_qsl () yang digunakan untuk mengurai string kueri ke dalam struktur data Python.
(Dalam rilis Python yang lebih lama, mereka ada di cgi
modul). Jadi, misalnya:
>>> 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']}
Perbedaan nyata antara kamus asli d
dan kamus "round-tripped" d1
adalah kamus yang terakhir memiliki (item tunggal, dalam hal ini) daftar sebagai nilai - itu karena tidak ada jaminan keunikan dalam string kueri, dan mungkin penting ke aplikasi Anda untuk mengetahui tentang beberapa nilai yang telah diberikan untuk setiap kunci (yaitu, daftar tidak akan selalu menjadi item tunggal ;-).
Sebagai alternatif:
>>> sq = urlparse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
Anda bisa mendapatkan urutan pasangan (urlencode menerima argumen seperti itu juga - dalam hal ini mempertahankan urutan, sedangkan dalam kasus dict tidak ada urutan untuk dipertahankan ;-). Jika Anda tahu tidak ada duplikat "kunci", atau tidak peduli jika ada, maka (seperti yang saya tunjukkan) Anda dapat memanggil dict
untuk mendapatkan kamus dengan nilai non-daftar. Secara umum, bagaimanapun, Anda perlu mempertimbangkan apa yang ingin Anda lakukan jika duplikat yang hadir (Python tidak memutuskan bahwa atas nama Anda ;-).
urllib
modul. Lihat jawaban @phobie.
Kode Python 3 untuk solusi 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']}
Alternatifnya:
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
parse_qsl dapat dibalik:
>>> urllib.parse.urlencode(sq)
'a=b&c=d'
urllib.unquote_plus()
melakukan apa yang kamu inginkan. Ini menggantikan% xx pelarian dengan karakter tunggalnya yang setara dan mengganti tanda plus dengan spasi.
Contoh:
unquote_plus('/%7Ecandidates/?name=john+connolly')
hasil
'/~candidates/?name=john connolly'.