을 사용한 후 cgi.parse_qs()
결과 (사전)를 쿼리 문자열로 다시 변환하는 방법은 무엇입니까? 와 비슷한 것을 찾고 urllib.urlencode()
있습니다.
을 사용한 후 cgi.parse_qs()
결과 (사전)를 쿼리 문자열로 다시 변환하는 방법은 무엇입니까? 와 비슷한 것을 찾고 urllib.urlencode()
있습니다.
답변:
urllib.parse.
urlencode
(쿼리, doseq = False, [...])변환 매핑 객체 또는 캐릭터 라인을 포함 또는 퍼센트로 인코딩 된 ASCII 텍스트 문자열, 객체를 바이트 수있는 두 가지 요소 튜플의 순서를.
A dict
는 매핑입니다.
urllib.urlencode
(query
[,doseq
])
변환 매핑 객체 또는 "퍼센트 인코딩"문자열 개의 원소 튜플 시퀀스 ... 일련의key=value
쌍으로 구분'&'
문자 ...
dict
반환 cgi.parse_qs()
된는 실제로 list
"값"으로 s를 갖습니다 . 이를 바로 전달하면 매우 이상한 쿼리 문자열이 생성됩니다.
당신은 정확히 같은 것을 찾고 있습니다 urllib.urlencode()
!
그러나 호출 할 때 parse_qs()
(에서 구별됨 parse_qsl()
) 사전 키는 고유 한 쿼리 변수 이름이고 값 은 각 이름에 대한 값 목록입니다 .
이 정보를에 전달 urllib.urlencode()
하려면 이러한 목록을 "평탄화"해야합니다. 다음은 튜플의 목록을 이해하는 방법입니다.
query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)
doseq=True
있습니다.
아마도 다음과 같은 것을 찾고있을 것입니다.
def dictToQuery(d):
query = ''
for key in d.keys():
query += str(key) + '=' + str(d[key]) + "&"
return query
사전을 가져 와서 urlencode처럼 쿼리 문자열로 변환합니다. 쿼리 문자열에 마지막 "&"를 추가하지만 return query[:-1]
문제가있는 경우 수정합니다.
str.join()
아직 만났 나요? 어때요 urllib.quote_plus()
?
urlencode
에서 urllib.py
왜 쿼리 문자열이 당신의 대답은 특히 (의 필요성을 알 수 있듯이 아주 간단하게, 때로는하지 않습니다 만드는 볼을 (그것이 당신의 파이썬으로하는 설치해야합니다)에 '인용'은 유효하지 않은 특정 문자 URL). @Ignacio는 또한 구현을 정리하고 수정하는 두 가지 함수를 참조했습니다.
from urllib.parse import urlencode; urlencode(your_dict)
)은 이것보다 짧고 쉽습니다! 나는 기존의 잘 디자인 된 바퀴에 접근하는 것이 비싸거나 불편할 때 조잡하게도 바퀴를 재발 명하는 것이 때때로 현명하다는 것을 인정할 것입니다. .
cgi.parse_qs()
더 이상 사용되지 않습니다. 대신 urlparse.parse_qs ()를 사용하십시오.