मैं प्रसंस्करण के बाद डेटा को कैसे परिवर्तित कर सकता हूं urllib.urlencode
?
urllib.urldecode
अस्तित्व में नहीं है।
जवाबों:
कहने के लिए डॉक्स के रूप मेंurlencode
,
Urlparse मॉड्यूल फ़ंक्शन parse_qs () और parse_qsl () प्रदान करता है, जिनका उपयोग पायथन डेटा संरचनाओं में क्वेरी स्ट्रिंग पार्स करने के लिए किया जाता है।
(पुराने पायथन रिलीज में, वे cgi
मॉड्यूल में थे )। इसलिए, उदाहरण के लिए:
>>> 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']}
मूल शब्दकोश d
और "राउंड-ट्रिप्ड" के बीच स्पष्ट अंतर d1
यह है कि बाद वाले के पास (एकल-आइटम, इस मामले में) मूल्यों के रूप में सूचीबद्ध है - ऐसा इसलिए है क्योंकि क्वेरी स्ट्रिंग्स में कोई विशिष्टता गारंटी नहीं है, और यह महत्वपूर्ण हो सकता है आपके एप्लिकेशन को यह जानने के लिए कि प्रत्येक कुंजी के लिए कितने मान दिए गए हैं (यानी, सूची हमेशा एकल-आइटम वाले नहीं होगी; ;-)
विकल्प के रूप में:
>>> sq = urlparse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
आप जोड़े का एक क्रम प्राप्त कर सकते हैं (urlencode इस तरह के एक तर्क को स्वीकार करता है, भी - इस मामले में यह आदेश को संरक्षित करता है, जबकि तानाशाह के मामले में; संरक्षित करने का कोई आदेश नहीं है;;;)। यदि आप जानते हैं कि कोई डुप्लिकेट "कुंजियाँ" नहीं हैं, या अगर वहाँ हैं, तो परवाह न करें, (जैसा कि मैंने दिखाया है) आप dict
गैर-सूची मूल्यों के साथ एक शब्दकोश प्राप्त करने के लिए कॉल कर सकते हैं। सामान्य तौर पर, हालांकि, आपको यह विचार करने की आवश्यकता है कि यदि आप डुप्लिकेट मौजूद हैं तो आप क्या करना चाहते हैं (पायथन तय नहीं करता है कि आपकी ओर ;-)
urllib
मॉड्यूल में पायथन 3 सभी है । @Phobie उत्तर देखें।
एलेक्स के समाधान के लिए पायथन 3 कोड :
>>> 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']}
वैकल्पिक:
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
parse_qsl प्रतिवर्ती है:
>>> urllib.parse.urlencode(sq)
'a=b&c=d'
urllib.unquote_plus()
जो तुम चाहते हो। यह उनके एकल-वर्ण समकक्ष द्वारा% xx से बचता है और रिक्त स्थान के साथ साथ प्लस संकेतों को बदलता है।
उदाहरण:
unquote_plus('/%7Ecandidates/?name=john+connolly')
पैदावार
'/~candidates/?name=john connolly'.