2016-02-02 15 views

Odpowiedz

6

myślę szukasz urllib.pathname2url. Porównaj:

Python 3, urllib.parse.quote:

>>> urllib.parse.quote('abc def/foo?bar=baz') 
'abc%20def/foo%3Fbar%3Dbaz' 

Python 2, urllib.pathname2url:

>>> urllib.pathname2url('abc def/foo?bar=baz') 
'abc%20def/foo%3Fbar%3Dbaz' 

zachowanie wydaje się podobny do mnie, ale mogą one być nieco inna.

Edit:

Czytając komentarz na post Algina jest, myślę, że to jest mój preferowany sposób zbudować URL:

>>> url = 'http://dev.echonest.com/api/v4/song/search' 
>>> params = {'api_key': 'xxxx', 'format': 'json', 'artist': 'Galaxie 500'} 
>>> "{}?{}".format(url, urllib.urlencode(params)) 
'http://dev.echonest.com/api/v4/song/search?api_key=xxxx&artist=Galaxie+500&format=json' 
+0

Dzięki, spróbuję, że – timothylhuillier

0

Czy możesz być dokładniejszy? masz urllib.parse.quote_plus(...) urllib.parse.quote_from_bytes(...) urllib.parse.unquote(...) jak wspomniałeś

zobaczyć doc tutaj: https://docs.python.org/3.2/library/urllib.parse.html

+0

Dzięki, mam 'req = 'http://dev.echonest.com/api/v4/song/search?api_key=xxxx&format=json&artist=' + urllib.parse.quote (artysta)' I 'artist =" Oasis "' – timothylhuillier

3

faktycznie przy użyciu biblioteki six, który jest wykonany na python2/kompatybilność python3 można zrobić

import six.moves.urllib as urllib 

# and now you can use urllib as it was python3 
urllib.quote(...) 

i jeśli chcesz po prostu python2, to rzeczywiście urllib.quote di nio

+0

Dziękuję za tę wskazówkę! –

+0

Hi @ allan.simon, mam zainstalowany pakiet 'six (1.10.0)' i otrzymuję obiekt AttributeError: 'Module_six_moves_urllib' nie ma atrybutu "quote". Każdy pomysł dlaczego? –

+0

Wydaje mi się, że potrzebowałem 'urllib.parse.quote (...)' (właściwie w moim przypadku potrzebowałem 'urllib.parse.quote_plus (...)'). –

Powiązane problemy