清理 url 查询的解析
Clean parsing of url query
目前,每当我需要解析查询字符串时,我最初都是在做
from urllib import parse
path = parse.urlparse(self.path)
query = parse.parse_qs(path.query)
value = query[name][0]
但我不喜欢 [0]
点缀在我的代码周围 - 它感觉 错误 以某种难以确定的方式,所以我意识到我可以做
from urllib import parse
path = parse.urlparse(self.path)
query = dict(parse.parse_qsl(path.query))
value = query[name]
这具有删除 [0]
的优点,但它有丢弃多个值的风险(这对我的应用程序来说应该没问题,无论如何它都不应该接收多个值)。
是否有一种更简洁的解析 urlencoded 字符串的方法,它为您提供 dict
最小值:如果只有一个值,则为值;如果有多个,则为列表?
这样做的功能应该不会太难,但我很好奇是否有一个库可以做到这一点,所以我不需要重新发明轮子。
一般来说,如果你有这样的字典query
,你总是可以
query = {[(k, v[0] if len(v) == 1 else v) for k, v in query.iteritems()]}
但是,我真的不喜欢这段代码,因为它只会产生一些后来不直观的东西。
目前,每当我需要解析查询字符串时,我最初都是在做
from urllib import parse
path = parse.urlparse(self.path)
query = parse.parse_qs(path.query)
value = query[name][0]
但我不喜欢 [0]
点缀在我的代码周围 - 它感觉 错误 以某种难以确定的方式,所以我意识到我可以做
from urllib import parse
path = parse.urlparse(self.path)
query = dict(parse.parse_qsl(path.query))
value = query[name]
这具有删除 [0]
的优点,但它有丢弃多个值的风险(这对我的应用程序来说应该没问题,无论如何它都不应该接收多个值)。
是否有一种更简洁的解析 urlencoded 字符串的方法,它为您提供 dict
最小值:如果只有一个值,则为值;如果有多个,则为列表?
这样做的功能应该不会太难,但我很好奇是否有一个库可以做到这一点,所以我不需要重新发明轮子。
一般来说,如果你有这样的字典query
,你总是可以
query = {[(k, v[0] if len(v) == 1 else v) for k, v in query.iteritems()]}
但是,我真的不喜欢这段代码,因为它只会产生一些后来不直观的东西。