পাইথনে কোয়েরি স্ট্রিংয়ে একটি অভিধানকে কীভাবে রূপান্তর করবেন?


112

ব্যবহারের পরে cgi.parse_qs()কীভাবে ফলাফল (অভিধান )টিকে ক্যোয়ারী স্ট্রিংয়ে ফিরিয়ে আনবেন? এর মতো কিছু খুঁজছেন urllib.urlencode()



উত্তর:


158

পাইথন ঘ

urllib.parse.urlencode(ক্যোয়ারী, ডোজকিউ = মিথ্যা, [...])

একটি ম্যাপিং অবজেক্ট বা দ্বি-এলিমেন্ট টিউপলগুলির ক্রম, যাতে স্ট্র বা বাইটস অবজেক্ট থাকতে পারে, শতাংশ-এনকোডেড ASCII পাঠ্য স্ট্রিংয়ে রূপান্তর করুন ।

- পাইথন 3 urllib.parseডক্স

dictম্যাপিং।

লিগ্যাসি পাইথন

urllib.urlencode( query[, doseq]) ম্যাপিং অবজেক্ট বা দ্বি-উপাদান টিপলগুলির ক্রমকে একটি "শতাংশ-এনকোডড" স্ট্রিংয়ে
রূপান্তর করুন ... অক্ষর দ্বারা পৃথক করা জোড়গুলির একটি সিরিজ ...key=value'&'

- পাইথন 2.7 urllibডক্স


1
এটি সত্য, তবে dictপ্রত্যাবর্তিত cgi.parse_qs()প্রকৃতপক্ষে listএর "মান" হিসাবে রয়েছে। এগুলিকে সরাসরি পাস করার ফলে খুব বিজোড় ক্যোয়ারী স্ট্রিং আসবে।
জনসিওয়েব

যথেষ্ট সত্য। আমাকে প্রথম বাক্যটির চেয়ে বেশি পড়তে শেখাবে!
জনসিওয়েব


সমস্যাটি হ'ল urlencode স্থানটিকে + এ রূপান্তর করবে যা প্রস্তাবিত নয়।
user1633272

1
@ ব্যবহারকারী1633272: কার অনুসারে প্রস্তাবিত নয়?
ইগনাসিও ওয়াজকেজ-আব্রামস

65

পাইথন 3 এ, কিছুটা আলাদা:

from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})

আউটপুট: 'pram1=foo&param2=bar'

পাইথন 2 এবং পাইথন 3 সামঞ্জস্যের জন্য, এটি ব্যবহার করে দেখুন:

try:
    #python2
    from urllib import urlencode
except ImportError:
    #python3
    from urllib.parse import urlencode

6

আপনি ঠিক এর মতো কিছু খুঁজছেন 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)

15
অথবা আপনি পাস করতে পারে doseq=True
Ignacio Vazquez-Abram

@ ডাউনভোটার: আমি কীভাবে এই উত্তরটি উন্নত করতে পারি? আমি এটা লিখতে ছয় বছর হয়েছে!
জনসিওয়েব

-1

আপনি এই জাতীয় কিছু খুঁজছেন হতে পারে:

def dictToQuery(d):
  query = ''
  for key in d.keys():
    query += str(key) + '=' + str(d[key]) + "&"
  return query

এটি একটি অভিধান নেয় এবং এটিকে ইউরেনকোডের মতো একটি কোয়েরি স্ট্রিংয়ে রূপান্তর করে। এটি ক্যোয়ারী স্ট্রিংয়ে একটি চূড়ান্ত "&" যুক্ত করবে, তবেreturn query[:-1] করবে, তবে এটি যদি কোনও সমস্যা হয় তবে এটি ঠিক করে।


4
আপনি str.join()এখনও দেখা করেছেন ? কীভাবে urllib.quote_plus()?
ইগনাসিও ওয়াজকেজ-আব্রামস

1
@garbados আপনার সমাধানটি সাধারণ ক্ষেত্রে কাজ করা উচিত। যাইহোক, একটি চেহারা আছে urlencodeমধ্যে urllib.py(এটা আপনার পাইথন দ্বারা ইনস্টল করা উচিত) কেন তৈরি করার সময় একটি কোয়েরি স্ট্রিং কখনও কখনও বেশ সহজ হিসাবে হিসাবে আপনার উত্তর বোঝা (বিশেষ করে প্রয়োজন না কিনা দেখতে হয় 'উদ্ধৃতি' নির্দিষ্ট কিছু অক্ষর আছে যা একটি বৈধ নয় URL টি)। @ ইগনাসিও দু'টি ফাংশন উল্লেখ করেছে যা আপনার বাস্তবায়ন পরিষ্কার করে এবং এটিকে সঠিক করে তুলবে।
অ্যান্টনি ক্র্যাম্প

আহ, সত্যিই। ক্রুডি বাস্তবায়নের জন্য দুঃখিত। দেখাতে গিয়ে আমার নিজের প্রশ্নের আগে উত্তর দেওয়া উচিত নয়।
garbados

যদিও এটি সেরা উত্তর নাও হতে পারে তবে আমি এই প্রশ্নের শিরোনামটি ক্লিক করার সময় এটি দেখতে চেয়েছিলাম exactly আমার কাছে একটি ডিকের মধ্যে কেবল 4 টি আইটেম রয়েছে যা আমাকে একটি '=' দিয়ে আলাদা করে একটি নাম = মান জোড়ায় রূপান্তরিত করতে হবে। আমার মান নিয়ন্ত্রণ করা হয়। Str.join () আমার ক্ষেত্রে সুবিধাজনক তবে আমার আবার কোট_প্লাস () এর দরকার নেই, কারণ এটি জনসমক্ষে কোড নয় :) ধন্যবাদ!
হার্পারভিলি

1
@harperville তবে আরও সঠিক উপায় ( from urllib.parse import urlencode; urlencode(your_dict)) এর চেয়ে ছোট এবং সহজ! আমি মঞ্জুরি দেব যে চাকাটি পুনরায় উদ্ভাবন করার জন্য এটি কখনও কখনও স্মার্ট, এমনকি খুব কম সময়েই, যখন বিদ্যমান, ভাল নকশাকৃত চাকাগুলি অ্যাক্সেস করতে ব্যয়বহুল বা অসুবিধে হয়, তবে এখানে অফ-দ্য-শেল্ফ হুইলটি আপনার নিজের নিকৃষ্টতর ঘূর্ণায়মানের চেয়ে সহজ এবং দ্রুততর হয় ।
মার্ক আমেরিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.