পাইথন, বিপরীত ফাংশন urllib.urlencode


89

প্রক্রিয়াকরণের পরে আমি ডিকাকে কীভাবে রূপান্তর করতে পারি urllib.urlencode? urllib.urldecodeএটির অস্তিত্ব নেই.

উত্তর:


126

ডকস হিসাবে urlencodeবলার জন্য ,

Urlparse মডিউল পার্স_কিউ () এবং 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'}

আপনি জোড়ার ক্রম পেতে পারেন (ইউরেনকোড এ জাতীয় যুক্তিটিও গ্রহণ করে) - এই ক্ষেত্রে এটি ক্রম সংরক্ষণ করে, যখন ডিকের ক্ষেত্রে সংরক্ষণের কোনও আদেশ নেই ;-)। আপনি যদি জানেন যে কোনও নকল "কী" নেই, বা আছে কিনা সেদিকে খেয়াল রাখেন না, তবে (যেমন আমি দেখিয়েছি) আপনি dictতালিকাবিহীন মান সহ একটি অভিধান পেতে কল করতে পারেন। সাধারণভাবে, যাইহোক, আপনি বিবেচনা করতে আপনি কি করতে চান তাহলে সদৃশ প্রয়োজন হয় বর্তমান (পাইথন যে সিদ্ধান্ত না আপনার পক্ষ ;-) উপর।


4
খুব পুঙ্খানুপুঙ্খ উত্তর। অসাধারণ!
হার্টলে ব্রোডি

4
পাইথন 2 এর পক্ষে ভোট দিন, তবে পাইথন 3 সবই urllibমডিউলে রয়েছে। @ ফোবি উত্তর দেখুন।
ওপেনভনক

19

অ্যালেক্সের সমাধানের জন্য পাইথন 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'}

পার্স_কিউএসএল বিপরীতমুখী:

>>> urllib.parse.urlencode(sq)
'a=b&c=d'

16

urllib.unquote_plus()আপনি যা চান তা করে এটি% xx এস্কেপগুলিকে তাদের একক-অক্ষর সমতুল্য দ্বারা প্রতিস্থাপিত করে এবং ফাঁক চিহ্ন সহ প্লাস চিহ্নগুলিকে প্রতিস্থাপন করে।

উদাহরণ:

unquote_plus('/%7Ecandidates/?name=john+connolly') 

উৎপাদনের

'/~candidates/?name=john connolly'.

4
তিনি বলেছিলেন, তিনি ডিক চেয়েছিলেন। সুতরাং আপনার উত্তর ভুল।
বালক

4
হ্যাঁ, আমি এটিই খুঁজছিলাম
জো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.