Nach der Verwendung cgi.parse_qs()
, wie das Ergebnis (Wörterbuch) zurück zu Query - String konvertieren? Auf der Suche nach etwas ähnlichem urllib.urlencode()
.
Nach der Verwendung cgi.parse_qs()
, wie das Ergebnis (Wörterbuch) zurück zu Query - String konvertieren? Auf der Suche nach etwas ähnlichem urllib.urlencode()
.
Antworten:
urllib.parse.
urlencode
(Abfrage, doseq = False, [...])Konvertieren Sie ein Zuordnungsobjekt oder eine Folge von Tupeln mit zwei Elementen, die Str- oder Byte-Objekte enthalten können, in eine prozentual codierte ASCII-Textzeichenfolge.
A dict
ist eine Abbildung.
urllib.urlencode
(query
[,doseq
])
Konvertieren Sie ein Zuordnungsobjekt oder eine Folge von Tupeln mit zwei Elementen in eine "prozentcodierte" Zeichenfolge ... eine Reihe vonkey=value
Paaren, die durch'&'
Zeichen getrennt sind ...
dict
zurückgegebene von hat cgi.parse_qs()
tatsächlich list
s als "Werte". Wenn Sie diese direkt übergeben, werden sehr seltsam aussehende Abfragezeichenfolgen erstellt.
In Python3 etwas anders:
from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})
Ausgabe: 'pram1=foo¶m2=bar'
Versuchen Sie Folgendes, um die Kompatibilität mit Python2 und Python3 zu gewährleisten:
try:
#python2
from urllib import urlencode
except ImportError:
#python3
from urllib.parse import urlencode
Sie suchen genau so etwas urllib.urlencode()
!
Wenn Sie jedoch parse_qs()
(anders als parse_qsl()
) aufrufen , sind die Wörterbuchschlüssel die eindeutigen Namen der Abfragevariablen und die Werte sind Wertelisten für jeden Namen.
Um diese Informationen weiterzugeben urllib.urlencode()
, müssen Sie diese Listen "reduzieren". So können Sie es mit einer Liste von Tupeln machen:
query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)
doseq=True
.
Vielleicht suchen Sie so etwas:
def dictToQuery(d):
query = ''
for key in d.keys():
query += str(key) + '=' + str(d[key]) + "&"
return query
Es nimmt ein Wörterbuch und konvertiert es in eine Abfragezeichenfolge, genau wie Urlencode. Es wird ein abschließendes "&" an die Abfragezeichenfolge angehängt, dies wird jedoch return query[:-1]
behoben, wenn es sich um ein Problem handelt.
str.join()
? Wie wäre es urllib.quote_plus()
?
urlencode
in urllib.py
(dies sollte in Ihrer Python-Installation der Fall sein) nach, warum das Erstellen einer Abfragezeichenfolge manchmal nicht ganz so einfach ist, wie es Ihre Antwort impliziert (insbesondere die Notwendigkeit, bestimmte Zeichen, die in a nicht gültig sind, in Anführungszeichen zu setzen) URL). @Ignacio hat auch auf zwei Funktionen verwiesen, die Ihre Implementierung bereinigen und korrigieren würden.
from urllib.parse import urlencode; urlencode(your_dict)
) ist kürzer und einfacher als dieser! Ich gebe zu, dass es manchmal klug ist, das Rad neu zu erfinden, selbst wenn es teuer oder unpraktisch ist, auf vorhandene, gut gestaltete Räder zuzugreifen, aber hier ist die Verwendung des Standardrads einfacher und schneller als das Rollen Ihres eigenen minderwertigen .
cgi.parse_qs()
ist veraltet. Verwenden Sie stattdessen urlparse.parse_qs ().