cgi.parse_qs()
का उपयोग करने के बाद, परिणाम (शब्दकोश) को वापस क्वेरी स्ट्रिंग में कैसे परिवर्तित करें? urllib.urlencode()
के समान कुछ ढूंढ रहे हैं।पायथन में क्वेरी स्ट्रिंग के लिए शब्दकोश को कैसे परिवर्तित करें?
उत्तर
the docs से:
urllib.urlencode
(query
[,doseq
])
कन्वर्ट एक मानचित्रण वस्तु या एक "प्रतिशत-एन्कोड" स्ट्रिंग के लिए दो तत्व tuples के एक दृश्य ... एक श्रृंखलाkey=value
जोड़े'&'
पात्रों द्वारा अलग ... की
एक dict
एक मानचित्रण है।
यह सच है, लेकिन 'cgi.parse_qs() 'द्वारा लौटाया गया' dict'' वास्तव में 'सूची' के रूप में 'मूल्य' है। इन सीधे में से गुजरने के परिणामस्वरूप बहुत अजीब दिखने वाले प्रश्न तार होंगे। – Johnsyweb
जैसा कि दस्तावेज़ कहते हैं, वही है जो 'डोसेक' है। –
पर्याप्त सच है। वह मुझे पहली वाक्य से अधिक पढ़ने के लिए सिखाएगा! – Johnsyweb
शायद तुम कुछ इस तरह की तलाश में हैं:
def dictToQuery(d):
query = ''
for key in d.keys():
query += str(key) + '=' + str(d[key]) + "&"
return query
यह सिर्फ urlencode की तरह एक शब्दकोश लेता है और यह एक क्वेरी स्ट्रिंग के लिए कनवर्ट। यह क्वेरी स्ट्रिंग में अंतिम "&" जोड़ देगा, लेकिन return query[:-1]
यह हल करता है कि, यदि यह कोई समस्या है।
क्या आपने अभी तक 'str.join() 'से मुलाकात की है? 'Urllib.quote_plus()' के बारे में कैसे? –
@garbados आपका समाधान सरल मामलों में काम करना चाहिए। हालांकि, 'urlib' में 'urlencode' देखें।पीई' (यह आपके पायथन इंस्टॉलेशन में होना चाहिए) यह देखने के लिए कि एक क्वेरी स्ट्रिंग क्यों बनाना कभी-कभी उतना आसान नहीं होता जितना आपका जवाब इंगित करता है (विशेष रूप से कुछ वर्णों को 'उद्धरण' करने की आवश्यकता जो यूआरएल में मान्य नहीं हैं)। @ इग्नासिओ ने दो कार्यों का भी संदर्भ दिया है जो आपके कार्यान्वयन को साफ करेंगे और इसे सही बना देंगे। –
आह, वास्तव में। क्रुद्ध कार्यान्वयन के लिए खेद है। शो में जाता है मुझे उन प्रश्नों का अधिक सावधान रहना चाहिए जिनसे मैंने कभी सामना नहीं किया है। – garbados
आप बिल्कुलurllib.urlencode()
जैसे कुछ ढूंढ रहे हैं!
हालांकि, जब तुम parse_qs()
(parse_qsl()
से अलग) कहते हैं, शब्दकोश कुंजी अनन्य क्वेरी चर नाम हैं और मान प्रत्येक नाम के लिए मान की सूची नहीं है।
इस जानकारी को urllib.urlencode()
में पास करने के लिए, आपको इन सूचियों को "फ़्लैट" करना होगा।
query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)
python3 में, थोड़ा अलग:
from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})
उत्पादन: 'pram1=foo¶m2=bar'
, इस कोशिश का तरीका यहां बताया tuples की एक सूची comprehenshion के साथ क्या कर सकते हैं:
try:
#python2
from urllib import urlencode
except ImportError:
#python3
from urllib.parse import urlencode
एनबी: ['cgi.parse_qs()' बहिष्कृत है। इसके बजाय urlparse.parse_qs() का उपयोग करें।] (Http://docs.python.org/library/cgi.html#cgi.parse_qs) – Johnsyweb
** यह भी देखें: ** https://stackoverflow.com/questions/5607551/ how-to-urlencode-a-querystring-in-python – dreftymac