Получить строку, которая содержит строку - PullRequest
0 голосов
/ 24 сентября 2011

Я пытаюсь получить строку из текстового файла, который содержит определенную последовательность символов:

мой ввод:

    <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, поэтому я пытался с регулярным оператором в:

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 голосов
/ 24 сентября 2011

Если input - это просто строка, то for line in input не выполняет итерацию строк, а итерацию символов. Таким образом, 'lucas' никогда не будет найдено в односимвольной строке, а tableInput не будет назначено. Поведение на основе строки итерации происходит только тогда, когда объект является файлом.

Если вы хотите перебрать каждую строку строки, вам нужно сделать:

for line in input.split('\n'):
    ...

Поскольку у вас есть BeautifulSoup, я бы сказал, что было бы намного лучше использовать это для чтения значения из первой ячейки в каждой строке, а не полагаться на грубый и хрупкий поиск строк. 1012 *

ETA:

как мне получить запись в таблице для строки, содержащей строку 'lucas', любые подсказки?

Используйте td.parent, чтобы получить содержащую строку, td.parent.parent, чтобы получить содержащую таблицу / tbody и т. Д.

Если вы хотите получить V или X в следующем столбце, вы можете сказать что-то вроде:

tr= soup.find(text= re.compile('lucas')).parent.parent
vorx= tr.findAll('td')[1].find('span').string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...