1

組織のWebサイトの任意のURLと同等のデバッグURLを作成したいと思います。私はこれを行うためのPython関数を持っています:

import urlparse
import urllib

def compose_debug_url(input_url):
    input_url_parts = urlparse.urlsplit(input_url)
    input_query = input_url_parts.query
    input_query_dict = urlparse.parse_qs(input_query)

    modified_query_dict = dict(input_query_dict.items() + [('debug', 'sp')])
    modified_query = urllib.urlencode(modified_query_dict)
    modified_url_parts = (
      input_url_parts.scheme,
      input_url_parts.netloc,
      input_url_parts.path,
      modified_query,
      input_url_parts.fragment
    )

    modified_url = urlparse.urlunsplit(modified_url_parts)

    return modified_url



print compose_debug_url('http://www.example.com/content/page?name=john&age=35')
print compose_debug_url('http://www.example.com/')

上記のコードを実行すると、次の出力が表示されます。

http://www.example.com/content/page?debug=sp&age=%5B%2735%27%5D&name=%5B%27john%27%5D
http://www.example.com/?debug=sp

代わりに私は期待しています:

http://www.example.com/content/page?debug=sp&age=35&name=john
http://www.example.com/?debug=sp

これurlparse.parse_qsは、文字列から文字列へのdictではなく、文字列からリストへのdictを返すためです。

Pythonでこれをもっと簡単に行う別の方法はありますか?

4

2 に答える 2

1

urlparse.parse_qs各キーの値のリストを返します。あなたの例で は、それ{'age': ['35'], 'name': ['john']}はですが、あなたが望むのはです{'age': '35', 'name': 'john'}

Key、Value Parsをリストとして使用しているので、urlparse.parse_qsl

modified_query_dict = dict(urlparse.parse_qsl(input_query) + [('debug', 'sp')])
于 2012-04-27T14:05:42.060 に答える
1

遅い答えですが、リストをフラット化するために使用できるパラメーターをurlencode取ります。doseq

于 2013-06-04T14:05:41.280 に答える