Python, 반대 함수 urllib.urlencode
처리 후 데이터 urllib.urlencode
를 dict 로 변환하려면 어떻게 해야합니까? urllib.urldecode
존재하지 않는다.
에 대한 문서 로 urlencode
,
urlparse 모듈은 쿼리 문자열을 Python 데이터 구조로 구문 분석하는 데 사용되는 parse_qs () 및 parse_qsl () 함수를 제공합니다.
(이전 Python 릴리스에서는 cgi
모듈에 있었습니다 ). 예를 들면 다음과 같습니다.
>>> import urllib
>>> import urlparse
>>> d = {'a':'b', 'c':'d'}
>>> s = urllib.urlencode(d)
>>> s
'a=b&c=d'
>>> d1 = urlparse.parse_qs(s)
>>> d1
{'a': ['b'], 'c': ['d']}
원래 사전 d
과 "왕복" 사전의 분명한 차이점 d1
은 후자가 값으로 목록 ( 이 경우 단일 항목)을 갖는다 는 것입니다. 이는 쿼리 문자열에 고유성 보장이 없기 때문이며 중요 할 수 있습니다. 앱에 각 키에 대해 제공된 여러 값에 대해 알 수 있습니다 (즉, 목록이 항상 단일 항목이되는 것은 아닙니다 .-).
대안으로 :
>>> sq = urlparse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
일련의 쌍을 얻을 수 있습니다 (urlencode는 그러한 인수도 허용합니다-이 경우 순서를 유지하고 dict의 경우 보존 할 순서가 없습니다 ;-). 중복 된 "키"가 없다는 것을 알고 있거나 존재하는지 상관하지 않는 경우 (내가 보여준 것처럼) dict
목록이 아닌 값을 가진 사전을 얻기 위해 호출 할 수 있습니다 . 그러나 일반적으로 중복 이 있는 경우 수행 할 작업을 고려해야합니다 (Python은 사용자를 대신하여 결정하지 않습니다 .-) .
Alex의 솔루션을위한 Python 3 코드 :
>>> import urllib.parse
>>> d = {'a':'b', 'c':'d'}
>>> s = urllib.parse.urlencode(d)
>>> s
'a=b&c=d'
>>> d1 = urllib.parse.parse_qs(s)
>>> d1
{'a': ['b'], 'c': ['d']}
대안 :
>>> sq = urllib.parse.parse_qsl(s)
>>> sq
[('a', 'b'), ('c', 'd')]
>>> dict(sq)
{'a': 'b', 'c': 'd'}
parse_qsl은 되돌릴 수 있습니다.
>>> urllib.parse.urlencode(sq)
'a=b&c=d'
urllib.unquote_plus()
당신이 원하는 것을합니다. % xx 이스케이프를 단일 문자로 대체하고 더하기 기호를 공백으로 바꿉니다.
예:
unquote_plus('/%7Ecandidates/?name=john+connolly')
수확량
'/~candidates/?name=john connolly'.
참고 URL : https://stackoverflow.com/questions/3542881/python-opposite-function-urllib-urlencode
'IT story' 카테고리의 다른 글
RatingBar를 만들어 별 다섯 개를 표시하는 방법 (0) | 2020.09.10 |
---|---|
PHPExcel에서 배경 셀 색상 설정 (0) | 2020.09.10 |
SQLAlchemy : 날짜 필드를 필터링하는 방법? (0) | 2020.09.09 |
Lombok에서 슈퍼 생성자를 호출하는 방법 (0) | 2020.09.09 |
TortoiseSVN에서 파일을 무시하려면 어떻게합니까? (0) | 2020.09.09 |