获取包含字符串的行
我想从一个文本文件中获取包含特定字符序列的那一行:
我的输入是:
<tr><td>lucas.vlan77.be</td> <td><span style="color:green;font-weight:bold">V</span></td> <td><span style="color:green;font-weight:bold">V</span></td> <td><span style="color:green;font-weight:bold">V</span></td> </tr>
<tr><td>jeanpierre.vlan77.be</td> <td><span style="color:green;font-weight:bold">V</span></td> <td><span title="Cannot connect to 193.191.187.25:22345." style="color:red;font-weight:bold">X</span></td> <td><span title="No response from DNS at 193.191.187.25." style="color:red;font-weight:bold">X</span></td> </tr>
<tr><td>sofie.vlan77.be</td> <td><span style="color:green;font-weight:bold">V</span></td> <td><span title="Cannot connect to 193.191.187.26:22345." style="color:red;font-weight:bold">X</span></td> <td><span title="No response from DNS at 193.191.187.26." style="color:red;font-weight:bold">X</span></td> </tr>
<tr><td>thomas.vlan77.be</td> <td><span style="color:green;font-weight:bold">V</span></td> <td><span style="color:green;font-weight:bold">V</span></td> <td><span style="color:green;font-weight:bold">V</span></td> </tr>
现在我需要找到包含“lucas”的那一行,我尝试用beautifulsoup来做,但它并不适合只获取一行内容,而是用来处理HTML标签的内容,所以我试着用常规的“in”操作符:
def soupParserToTable(self,input):
global header
soup = self.BeautifulSoup(input)
header = soup.first('tr')
tableInput='0'
for line in input:
if 'lucas' in line:
tableInput = line
print tableInput
但是它总是返回0,而不是我想要的内容:
<tr><td>lucas.vlan77.be</td> <td><span style="color:green;font-weight:bold">V</span></td> <td><span style="color:green;font-weight:bold">V</span></td> <td><span style="color:green;font-weight:bold">V</span></td> </tr>
1 个回答
3
如果input
只是一个字符串,那么for line in input
并不是在逐行遍历,而是在逐个字符遍历。所以像'lucas'
这样的字符串在一个只有一个字符的字符串中是找不到的,这样tableInput
就不会被赋值。逐行遍历的行为只有在对象是文件的时候才会发生。
如果你想要遍历一个字符串的每一行,你需要这样做:
for line in input.split('\n'):
...
既然你有BeautifulSoup这个工具,我觉得用它来读取每一行第一个单元格的值会好得多,而不是依赖那些粗糙且不可靠的字符串搜索。
补充说明:
我该如何获取包含字符串'lucas'的行的表格条目,有什么提示吗?
可以使用td.parent
来获取包含的行,使用td.parent.parent
来获取包含的表格或
如果你想要获取下一列中的V
或X
,你可以这样写:
tr= soup.find(text= re.compile('lucas')).parent.parent
vorx= tr.findAll('td')[1].find('span').string