Setelah menggunakan cgi.parse_qs()
, bagaimana cara mengubah hasil (kamus) kembali ke string kueri? Mencari sesuatu yang mirip dengan urllib.urlencode()
.
Setelah menggunakan cgi.parse_qs()
, bagaimana cara mengubah hasil (kamus) kembali ke string kueri? Mencari sesuatu yang mirip dengan urllib.urlencode()
.
Jawaban:
urllib.parse.
urlencode
(kueri, dosisq = Salah, [...])Mengonversi objek pemetaan atau urutan tupel dua elemen, yang mungkin berisi objek str atau byte, menjadi string teks ASCII berenkode persen.
A dict
adalah pemetaan.
urllib.urlencode
(query
[,doseq
])
Mengonversi objek pemetaan atau urutan tupel dua elemen menjadi string "berenkode persen" ... serangkaiankey=value
pasangan yang dipisahkan oleh'&'
karakter ...
dict
dikembalikan oleh cgi.parse_qs()
sebenarnya memiliki list
s sebagai "nilai" -nya. Meneruskan langsung ini akan menghasilkan string kueri yang tampak sangat aneh.
Di python3, sedikit berbeda:
from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})
keluaran: 'pram1=foo¶m2=bar'
untuk kompatibilitas python2 dan python3, coba ini:
try:
#python2
from urllib import urlencode
except ImportError:
#python3
from urllib.parse import urlencode
Anda sedang mencari sesuatu yang persis seperti urllib.urlencode()
!
Namun, saat Anda memanggil parse_qs()
(berbeda dari parse_qsl()
), kunci kamus adalah nama variabel kueri unik dan nilainya adalah daftar nilai untuk setiap nama.
Untuk meneruskan informasi ini urllib.urlencode()
, Anda harus "meratakan" daftar ini. Berikut adalah bagaimana Anda dapat melakukannya dengan pemahaman daftar tupel:
query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)
doseq=True
.
Mungkin Anda sedang mencari sesuatu seperti ini:
def dictToQuery(d):
query = ''
for key in d.keys():
query += str(key) + '=' + str(d[key]) + "&"
return query
Dibutuhkan kamus dan mengubahnya menjadi string kueri, seperti urlencode. Ini akan menambahkan akhir "&" ke string kueri, tetapi return query[:-1]
memperbaikinya, jika itu menjadi masalah.
str.join()
belum? Bagaimana dengan urllib.quote_plus()
?
urlencode
di urllib.py
(harus dalam instalasi Python Anda) untuk melihat mengapa membuat string kueri terkadang tidak sesederhana jawaban Anda (khususnya kebutuhan untuk 'mengutip' karakter tertentu yang tidak valid dalam URL). @Ignacio juga mereferensikan dua fungsi yang akan membersihkan implementasi Anda dan membuatnya benar.
from urllib.parse import urlencode; urlencode(your_dict)
) lebih pendek dan lebih mudah dari ini! Saya akan mengakui bahwa terkadang cerdas untuk menemukan kembali roda, bahkan dengan buruk, ketika mahal atau tidak nyaman untuk mengakses roda yang ada dan dirancang dengan baik, tetapi di sini menggunakan roda off-the-shelf lebih mudah dan lebih cepat daripada memutar roda inferior Anda sendiri .
cgi.parse_qs()
tidak digunakan lagi. Gunakan urlparse.parse_qs () sebagai gantinya.