0

假设有一个包含以下内容的表格:

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

我想在 python 上做到这一点:

>>>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'], 

等等。请帮忙。这是我最初几天的编程,我已经卡住了。提前致谢。

4

4 回答 4

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>在同一行。

于 2013-06-16T14:14:10.147 回答
2

首先,您应该知道regex(正则表达式)并不总是解析某些数据的最佳解决方案。例如,在这里,您的所有元素都由 a 分隔,,因此该split方法是要走的路。

至于将元素作为具有单个元素的数组,列表理解是最简单的方法。再说一遍:确保你真的想要/需要这样做。拥有一组具有单个元素的列表没有多大意义。

这是一个建议的实现:

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 ]
于 2013-06-16T14:58:03.297 回答
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])

[]当您在循环迭代期间附加以将每个项目标记到它自己的列表中时,您只是错过了这两个字符。

于 2013-06-16T14:17:51.917 回答
0

尝试这个:

>>> my_list = ['Dog','Cat','Mouse'] 
>>> map(lambda x: [x], my_list)
[['Dog'], ['Cat'], ['Mouse']]
于 2013-06-16T14:12:15.450 回答