2011-03-14 7 views
1

저는 주위를 둘러 보았고 파이썬에서 텍스트를 분할하는 방법에 대한 몇 가지 예를 발견했지만 예제에는 문제가 있습니다.구문 분석에 문제가 있습니다.

다음
<img alt="" src="http://example.com/servlet/charting?base_color=grey&amp;chart_width=288&amp;chart_height=160&amp;chart_type=png&amp;chart_style=manufund_pie&amp;3DSet=true&amp;chart_size=small&amp;leg_on=left&amp;static_xvalues=10.21,12.12,43.12,12.10,&amp;static_labels=blue,red,green,purple"> 

내가 시도 내용은 다음과 같습니다 : 여기 구문 분석 할 무엇

dict(kvpair.split('=') for kvpair in variableIwantToParse.split('&')) 

는 다음과 같은 에러가 발생합니다;

"ValueError를 둘 필요가 사전 업데이트 시퀀스 요소 # 0의 길이는 5있다"

variableIwantToParse.strip ('&')도 사용하려고했지만 variableIwantToParse를 인쇄하려고 시도했을 때 한 번에 한 글자 만 옮겼습니다.

나는 이것이 쉽다고 확신하지만 그것을 파싱하는 방법을 알아낼 수 없습니다. 기본적으로 10.21,12.12,43.12,12.10은 청색, 적색, 녹색, 보라색 (표시된 순서대로)을 원합니다.

대단히 감사합니다. (너무 쉽다면 유감스럽게 생각합니다. 내 인생을 위해이 구문을 해석하는 명령을 찾아야합니다.)

+0

텍스트가 아니라 HTML입니다. 제목과 태그가 조정되었습니다. –

답변

7

내장 된 urlparse module을 사용하십시오. 이러한 스플릿은 직접하지 마십시오. 당신이 버전보다 2.6 파이썬을 사용하는 경우

>>> import urlparse 
>>> url_to_parse = "http://example.com/servlet/charting?base_color=grey&amp;chart_width=288&amp;chart_height=160&amp;chart_type=png&amp;chart_style=manufund_pie&amp;3DSet=true&amp;chart_size=small&amp;leg_on=left&amp;static_xvalues=10.21,12.12,43.12,12.10,&amp;static_labels=blue,red,green,purple" 
>>> parsed_url = urlparse.urlparse(url_to_parse) 
>>> query_as_dict = urlparse.parse_qs(parsed_url.query) 
>>> print query_as_dict 
{'chart_size': ['small'], 'base_color': ['grey'], 'chart_style': ['manufund_pie'], 'chart_height': ['160'], 'static_xvalues': ['10.21,12.12,43.12,12.10,'], 'chart_width': ['288'], 'static_labels': ['blue,red,green,purple'], 'leg_on': ['left'], 'chart_type': ['png'], '3DSet': ['true']} 

는, 당신은 cgi module를 가져올 수 있습니다. 대신이 작업을 수행합니다 :

>>> import urlparse 
>>> import cgi 
>>> parsed_url = urlparse.urlparse(url_to_parse) 
>>> query_as_dict = cgi.parse_qs(parsed_url.query) 
>>> print query_as_dict 
{'chart_size': ['small'], 'base_color': ['grey'], 'chart_style': ['manufund_pie'], 'chart_height': ['160'], 'static_xvalues': ['10.21,12.12,43.12,12.10,'], 'chart_width': ['288'], 'static_labels': ['blue,red,green,purple'], 'leg_on': ['left'], 'chart_type': ['png'], '3DSet': ['true']} 

그런 다음 zip 함께 제공된 DICT 생성자를 사용하여, 사전에 연결할 수 있습니다.

>>> print dict(zip(query_as_dict['static_labels'][0].split(','), query_as_dict['static_xvalues'][0].split(','))) 
{'blue': '10.21', 'purple': '12.10', 'green': '43.12', 'red': '12.12'} 
+0

빠른 답변을 주셔서 대단히 감사합니다. 나는 이것을 시도하고 "AttributeError : 'module'객체에 'parse_qs'속성이 없다는 오류가 발생했습니다."Python 용 모듈이 누락 되었습니까? 또는 유형입니까? 나는이 명령을 알지 못해서 무엇이 거기에 가야 하는지를 알아 내려고 미안하다. – Lostsoul

+0

Python <2.6을 사용하고 있습니까? –

+0

아니요, 죄송합니다. 자이 썬 2.5.1을 사용하고 있습니다. 언급하지 않았다. – Lostsoul

0

대괄호 : A & &와 교체도

dict([kvpair.split('=') for kvpair in variableIwantToParse.split('&')]) 

; 도움이 될 수 있습니다.

0

이 당신이 원하는 무엇을 얻을 것이다 :

d = dict(kv.split('=') for kv in string_to_parse.split('?')[1][:-2].split('&amp;')) 
labels_and_values = zip(d['static_labels'].split(','), d['static_xvalues'].split(',')) 

그것은 당신이 문제로 실행할 때 명령 프롬프트에서 물건을 분해 정말 유용 할 수 있습니다. 예를 들면 : 당신이 그것을 확인해보세요

10 > for kv in s.split('&'): 
...:  print kv.split('=') 

당신은 (목록에서 하나 개의 항목에 대한 공급 DICT 너무 많은 값) 당신에게 문제를 일으키는 &에 분할을 볼 수 있습니다.

관련 문제