Parse-Query-String mit urllib in Python 2.4
Frage
Mit Python2.4.5 (fragen Sie nicht!) Ich möchte eine Abfrage-Zeichenfolge analysieren und einen dict im Gegenzug bekommen. Muss ich es tun „von Hand“ wie folgt?
>>> qs = 'first=1&second=4&third=3'
>>> d = dict([x.split("=") for x in qs.split("&")])
>>> d
{'second': '4', 'third': '3', 'first': '1'}
Haben keine nützliche Methode in urlparse
finden.
Lösung
Sie haben zwei Möglichkeiten:
>>> cgi.parse_qs(qs)
{'second': ['4'], 'third': ['3'], 'first': ['1']}
oder
>>> cgi.parse_qsl(qs)
[('first', '1'), ('second', '4'), ('third', '3')]
Die Werte in der dict von cgi.parse_qs()
zurück sind Listen statt Strings, um den Fall zu behandeln, wenn der gleiche Parameter mehrmals angegeben wird:
>>> qs = 'tags=python&tags=programming'
>>> cgi.parse_qs(qs)
{'tags': ['python', 'programming']}
Andere Tipps
Das löst das Ärgernis:
d = dict(urlparse.parse_qsl( qs ) )
persönlich würde ich erwarten, dass es zwei ein in urlparse in Wrapper gebaut sein. in den meisten Fällen würde ich nicht verwirft die redundante Parameter, wenn eine solche exist
Geistimport urlparse
qs = 'first=1&second=4&third=3&first=0'
print dict(urlparse.parse_qsl(qs))
OR
print urlparse.parse_qs(qs)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow