Kullandıktan sonra cgi.parse_qs()
sonucu (sözlük) tekrar sorgu dizesine nasıl dönüştürebilirim? Benzer bir şey arıyorum urllib.urlencode()
.
Kullandıktan sonra cgi.parse_qs()
sonucu (sözlük) tekrar sorgu dizesine nasıl dönüştürebilirim? Benzer bir şey arıyorum urllib.urlencode()
.
Yanıtlar:
urllib.parse.
urlencode
(sorgu, dozq = Yanlış, [...])Dönüştürme bir eşleme nesne veya str içeren ya da yüzde olarak kodlanmış bir ASCII metin dizesine, nesneleri bayt olabilir, iki eleman dizilerini, bir dizi.
A dict
bir eşlemedir.
urllib.urlencode
(query
[doseq
])
Dönüştürme bir eşleme nesnesi ya da bir “yüzde olarak kodlanmış” dizge iki öğeli dizilerini bir dizi ... bir dizikey=value
çifti ile ayrılmış'&'
karakterler ...
dict
tarafından döndürülen cgi.parse_qs()
aslında list
"değerleri" olarak s'ye sahiptir . Bunları doğrudan aktarmak, çok garip görünen sorgu dizelerine neden olacaktır.
Python3'te biraz farklı:
from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})
çıktı: 'pram1=foo¶m2=bar'
python2 ve python3 uyumluluğu için şunu deneyin:
try:
#python2
from urllib import urlencode
except ImportError:
#python3
from urllib.parse import urlencode
Tam olarak buna benzer bir şey arıyorsunuz urllib.urlencode()
!
Ancak, aradığınızda parse_qs()
(ondan farklı parse_qsl()
), sözlük anahtarları benzersiz sorgu değişken adlarıdır ve değerler , her ad için değer listeleridir .
Bu bilgileri içeri aktarmak için urllib.urlencode()
, bu listeleri "düzleştirmelisiniz". İşte tuple'ların bir liste anlayışı ile bunu nasıl yapabileceğiniz:
query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)
doseq=True
.
Belki böyle bir şey arıyorsunuz:
def dictToQuery(d):
query = ''
for key in d.keys():
query += str(key) + '=' + str(d[key]) + "&"
return query
Bir sözlük alır ve onu urlencode gibi bir sorgu dizesine dönüştürür. Sorgu dizesine son bir "&" ekler, ancak bir return query[:-1]
sorunsa bunu düzeltir.
str.join()
Henüz tanışmadın mı ? Nasıl olur urllib.quote_plus()
?
urlencode
içinde urllib.py
neden bir sorgu dizesi Cevabınız özellikle (gereğini anlaşılacağı gibi oldukça basit olarak bazen değildir oluştururken görmek için (sizin Python ile yüklemeniz gerekir) için 'alıntı' a geçerli olmayan bazı karakterler URL). @Ignacio, uygulamanızı temizleyecek ve düzeltecek iki işleve de başvurmuştur.
from urllib.parse import urlencode; urlencode(your_dict)
) bundan daha kısa ve daha kolaydır! Mevcut, iyi tasarlanmış tekerleklere erişmek pahalı veya elverişsiz olduğunda bazen tekerleği yeniden icat etmenin akıllıca olduğunu kabul edeceğim, ancak burada kullanıma hazır tekerleği kullanmak, kendi aşağı olanı yuvarlamaktan daha kolay ve daha hızlıdır. .
cgi.parse_qs()
kullanımdan kaldırıldı. Bunun yerine urlparse.parse_qs () kullanın.