2015-05-18 2 views
0

В настоящее время, когда мне нужно разобрать строку запроса, я изначально делалClean синтаксический разбор запроса URL

from urllib import parse 

path = parse.urlparse(self.path) 
query = parse.parse_qs(path.query) 

value = query[name][0] 

Но я не люблю [0] S пунктир вокруг моего кода - он чувствовал неправильно в некоторые трудно точно определить путь, так что я понял, что я мог сделать

from urllib import parse 

path = parse.urlparse(self.path) 
query = dict(parse.parse_qsl(path.query)) 

value = query[name] 

это имеет то преимущество, что удаление [0] «с, но он рискует отбрасывая несколько значений (которые должны быть хорошо для моего приложения, которое не должно быть получение мульти все равно).

Есть ли более чистый способ анализа строк с urlencoded, который дает вам dict минимальных значений: значение, если есть только одно значение или список, если их несколько?

Функция для этого не должна быть слишком сложной, но мне любопытно, есть ли библиотека, которая делает это, поэтому мне не нужно изобретать велосипед.

ответ

2

В общем, если у вас есть такой словарь query, вы всегда можете сделать

query = {[(k, v[0] if len(v) == 1 else v) for k, v in query.iteritems()]} 

Однако, мне действительно не нравится этот код, так как он просто производит материал, который неинтуитивный позже.

+0

'parse.parse_qs' возвращает dict, [' parse.parse_qsl' возвращает список пар '(ключ, значение)'. (Https://docs.python.org/3/library/urllib.parse .html # urllib.parse.parse_qsl) – RoadieRich

+0

А, я пропустил '' l'', в конце не было опечатки. Будет редактировать. –

Смежные вопросы