2010-04-05 5 views
0

다음 구조의 지정된 HTML 테이블을 파이썬으로 정렬해야 할 필요성이 있습니다.Python에서 HTML 태그 (셀의 앵커 태그와 데이터 포함) 정렬

<table> 
    <tr> 
     <td><a href="#">ABCD</a></td> 
     <td>A23BND</td> 
     <td><a title="ABCD">345345</td> 
    </tr> 
    <tr> 
     <td><a href="#">EFG</a></td> 
     <td>Add4D</td> 
     <td><a title="EFG">3432</td> 
    </tr> 
    <tr> 
     <td><a href="#">HG</a></td> 
     <td>GJJ778</td> 
     <td><a title="HG">2341333</td> 
    </tr> 

</table> 

나는 이런 식으로 뭔가를하고 있어요 :

container = tree.findall("tr") 
strOut = "" 
data = [] 
for elem in container: 
    key = elem.findtext(colName) 
    data.append((key, elem)) 

data.sort() 

문제는 그것이 <td> 내부의 텍스트로 정렬하는 것입니다. 나는 href가 아닌 anchor value로 정렬 할 수 있기를 원한다.

이를 달성하려면 어떻게해야합니까? 고마워.

답변

1

그 때문에 그것은 당신이 어떤 태그 문자열 당신은 내가 colName 상상

key = elem.findtext(colName) 

를 수행 키로되어 추출하고 있으며, findtext 단지 첫 번째 하위 요소 일치의 텍스트를 찾을 수 있습니다 무엇을 텍스트로 정렬하는 꼬리표. 당신이 대신 원하는 것은 키 같은 일부 속성 (예를 들어, title?)를 <a>의 값을 사용하는 경우

for ana in elem.findall('a'): 
    key = ana.get('title') 
    if key is not None: break 

는 할 것입니다. 정확히 무엇을 키로 사용 하시겠습니까?

0

메서드는 사용자 지정 정렬에 사용할 수있는 keycmp 인수가 있습니다. 정렬에 필요한 추가 정보를 사용하여 data 데이터 구조를 보강하면 원하는 결과를 얻기 위해 sort 호출에서 key 또는 cmp (정확한 필요에 따라 다름)을 사용할 수 있습니다. 다음은 간단한 예입니다 : 여기

In [60]: ids = [1, 2, 3] 
In [61]: score = {1: 20, 2: 70, 3: 40} 
In [62]: ids.sort(key=lambda x: score[x]) 
In [63]: ids 
Out[63]: [1, 3, 2] 

, 나는 score 사전에서 가져온 각 id의 점수에 따라 ids 목록을 분류.

+0

@Eli을에는 문제가되지 않으나, 그래서 파이썬의 종류는 '키를 획득하기 전에에서 이전 "장식, 정렬, undecorate"관용구를 사용하여 영업 코드는 ='인수. 이 문제는 OP와 관련이 없습니다. OP의 특정 상황에서 키를 추출하는 올바른 방법에 관한 것입니다. –

+0

@Alex : 네 말이 맞아. 나에게 그것은 OP가 관심있는 핵심이 무엇인지도 분명하지 않았기 때문에 코드를 작성하는 더 관용적 인 방법을 알려달라고 합의했다. –

0

나는 이것이 귀하의 질문이 아니라는 것을 알고 있지만, 이런 종류의 일에 대한 최선의 관행은 자바 스크립트를 사용하는 것입니다. 웹 사이트에서 더 나은 사용자 환경을 경험할 수 있습니다 (그렇게하는 경우).

이 라이브러리 JS 사용이 우수하고 쉽게 : http://www.kryogenix.org/code/browser/sorttable/

+0

파이썬이 테이블을 처리하기에는 브라우저가 너무 크기 때문에 파이썬에 그렇게하기를 원한다. 따라서 서버 측에서 정렬이 필요합니다. 현재 JS 구현을 사용하고 있습니다. –