2010-08-22 13 views

उत्तर

112

urlencode के लिए the docs के रूप में कहते हैं,

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 मामले में संरक्षित करने के लिए कोई आदेश नहीं है, जबकि; -)। यदि आपको पता है कि कोई डुप्लिकेट "कुंजी" नहीं है, या यदि कोई है तो परवाह नहीं है, फिर (जैसा कि मैंने दिखाया है) आप गैर-सूची मूल्यों के साथ शब्दकोश प्राप्त करने के लिए dict पर कॉल कर सकते हैं। आम तौर पर, आपको यह विचार करने की आवश्यकता है कि आप क्या करना चाहते हैं यदि डुप्लिकेट मौजूद हैं (पायथन आपकी तरफ से तय नहीं करता है ;-)।

+1

एलेक्स मार्टेलि, धन्यवाद! – Artyom

+0

@ डेरेक, आपका स्वागत है! –

+1

बहुत गहन जवाब। बहुत बढ़िया! –

14

एलेक्स के समाधान के लिए Python 3 code:

>>> 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' 
14

urllib.unquote_plus() आप क्या चाहते हैं नहीं करता है। यह% xx को अपने सिंगल-कैरेक्टर समकक्ष से बचाता है और रिक्त स्थान के साथ प्लस संकेतों को प्रतिस्थापित करता है।

उदाहरण: unquote_plus ('/% 7Ecandidates /? Name = john + connolly') '/ ~ उम्मीदवार/नाम = जॉन connolly' पैदा करता है।

+1

उसने कहा, वह एक नियम चाहता था। तो आपका जवाब गलत है। – balrok

+3

yay, यही वह है जिसे मैं ढूंढ रहा था। – Joe

संबंधित मुद्दे