2013-06-16 2 views
0

는 다음과 같은 내용이있는 테이블이 있었다고 말할 수 :어떻게 이것을 파이썬으로 분할합니까?

<td>Dog,Cat,Mouse</td> 
<td>Snake,Dragon,Dinosaur,Lizard</td> 
<td>Owl,Falcon,Phoenix</td> 

이와 내가 파이썬에서이처럼 만들고 싶어 :

>>>pets 
[['Dog'],['Cat'],['Mouse'],['Snake'],['Dragon'],['Dinosaur'],['Lizard'],['Owl'],['Falcon'],['Phoenix']] 

이 내가 지금까지 관리 한 것입니다.

animal = table.find_all('td') 
pets = [] 
for i in animal: 
    a = re.findall('[A-Z][a-z]*',str(i)) 
    pets.append(a) 

그러나, 나는 등등

['Dog','Cat','Mouse'] 

['Dog'],['Cat'],['Mouse'], 

등을 설정하는 방법을 알아낼 기운 다. 도와주세요. 이것은 프로그래밍의 처음 며칠이며 이미 붙어 있습니다. 미리 감사드립니다.

>>> my_list = ['Dog','Cat','Mouse'] 
>>> map(lambda x: [x], my_list) 
[['Dog'], ['Cat'], ['Mouse']] 
+3

(http://www.perlmonks.org/?node_id=542341) - 왜 모든 요소는 자신에 중첩되어야한다 명부? 왜 단순한 값 목록을 사용하지 않는가? – l4mpi

답변

2
import re 
strs = """<td>Dog,Cat,Mouse</td> 
<td>Snake,Dragon,Dinosaur,Lizard</td> 
<td>Owl,Falcon,Phoenix</td>""" 

r = re.compile(r'<td>(.*?)</td>') 
print [[x] for m in r.finditer(strs) for x in m.group(1).split(',')] 

이 인쇄 :

[['Dog'], ['Cat'], ['Mouse'], ['Snake'], ['Dragon'], ['Dinosaur'], ['Lizard'], ['Owl'], ['Falcon'], ['Phoenix']] 

과 같은 줄에 여러 <td>..</td>을 지원

+0

@bernardpaulus'' 올빼미, 팔콘, 피닉스 ''에 실패 할 수 있습니다. –

+0

@AshwiniChaudary 그래, 그 입력은 ' 개, 고양이, 마우스 뱀, 드래곤, 공룡, 도마뱀'같은 줄에있을 가능성이 훨씬 적습니다. 수정은 본질적으로 한 문자 (정규 표현식에서'*'다음에'?'를 추가 한 것)이기 때문에 재미있을 것이라고 생각했습니다. 또한 정규 표현식 'r' (. *) '은 (는) 사용자가 지적한 사례를 지원하지 않습니다. 그러나 어쨌든 좋은 대답은 어쨌든 –

+1

@bernardpaulus 나는 당신이 좋은 지적을했다고 생각한다. 귀하의 제안에 감사드립니다. :) –

0

변경이 : 여기에

animal = table.find_all('td') 
    pets = [] 
    for i in animal: 
     a = re.findall('[A-Z][a-z]*',str(i)) 
     pets.append(a) 

: 당신은 루프 반복 중에 자신의 목록에 각 항목을 표시하기 위해 추가 될 때

animal = table.find_all('td') 
    pets = [] 
    for i in animal: 
     a = re.findall('[A-Z][a-z]*',str(i)) 
     pets.append([a]) 

당신은 두 문자 [] 누락되었다.

2

먼저, regex (정규 표현식)이 일부 데이터를 구문 분석하기위한 최선의 해결책은 아님을 알아야합니다. 예를 들어, 모든 요소는 ,으로 구분되므로 split 메소드를 사용하는 것이 좋습니다.

요소를 하나의 요소로 배열로 요소를 배치하는 경우 목록 이해가이를 수행하는 가장 쉬운 방법입니다. 다시 말하지만 이 실제로이 필요/필요하다는 것을 확인하십시오. 단일 요소로 일련의 목록을 갖는 것은별로 중요하지 않습니다. 여기

이 제안 구현의 :이은 [XY 문제] 생각

elements = table.find_all('td') 
pets = [] 
for e in elements: 
    # The following line is only needed if 'find_all' keeps the <td> and </td> 
    e_tagless = e[5:len(e)-5] 

    animals = e_tagless.split(',') 
    pets += [ [animal] for animal in animals ] 
+0

+1이 간단한 무언가를 위해 정규식을 사용하지 않는 언급. 각 동물을 자신의 목록에 추가 할 필요성을 묻는 것으로 개선 될 수 있습니다. –

+0

사실 내가 그 일을 실제로 원한다면 그에게 물어 봄으로써 이미 그렇게했습니다. 나는 답을 더 명확하게 편집 할 것이다. – halflings

+0

그에게 regex 솔루션을주는 것보다 여전히 좋습니다. ;)하지만 좋은 직업 : P –

관련 문제