Извлечь строки в Python - PullRequest
0 голосов
/ 17 марта 2010

В основном я хочу извлечь строки "AAA", "BBB", "CCC", "DDD" из текстового файла ...

...... (other text goes here).....
<TD align="left" class=texttd><font class='textfont'>AAA</font></TD>
..... (useless text here).....
<TD align="left" class=texttd><font class='textfont'>BBB</font></TD>
....(more text).....
<TD align="left" class=texttd><font class='textfont'>CCC</font></TD>
<TD align="left" class=texttd><font class='textfont'>DDD</font></TD>
......(more text).....

Я хочу что-то вроде этого: -

data = foo ("file.txt")

Я получаю: -

data = ['AAA', 'BBB', 'CCC', 'DDD']

Каков наилучший способ? Мой файл не большой ...

В основном, я хочу извлечь "оставшуюся передачу данных загрузки" из этого файла , который в HTML выглядит как ЭТО

Ответы [ 5 ]

2 голосов
/ 17 марта 2010

Вы можете написать REGEX, но это будет в некоторой степени "разбирать" HTML. Проблема с написанием регулярных выражений для HTML - это беспорядок. Это редко идеально, и это вызывает проблемы, когда вы полагаетесь на это для данных.

Я бы лично использовал BeautifulSoup. Это делает больше, чем вы просите, но и на суперфракции усилий.

0 голосов
/ 17 марта 2010

Если вы просто хотите получить данные из всех тегов в HTML-документе, при этом удаляя все теги сами, вы можете сделать что-то вроде этого:

import HTMLParser

class DataOnlyParser(HTMLParser.HTMLParser):
    def parse(self, text):
        self.result = []
        self.feed(text)
        self.close()
        return self.result

    def handle_data(self, data):
        data = data.strip()
        if data:
            self.result.append(data)

p = DataOnlyParser()

data = """
<TD align="left" class=texttd><font class='textfont'>AAA</font></TD>
<TD align="left" class=texttd><font class='textfont'>BBB</font></TD>
<TD align="left" class=texttd><font class='textfont'>CCC</font></TD>
<TD align="left" class=texttd><font class='textfont'>DDD</font></TD>
"""

print p.parse(data)
# ['AAA', 'BBB', 'CCC', 'DDD']

Если ваши критерии выбора более сложны, и / или если входные данные искажены, вам, вероятно, лучше использовать такую ​​библиотеку, как lxml.

Вы НЕ хотите использовать регулярные выражения для "разбора" html. Смотри здесь .

0 голосов
/ 17 марта 2010

В таком случае, попробуйте regex для него (который действительно будет иметься), используйте заранее написанную библиотеку или сделайте это самостоятельно с f = open() f.read() и вашим собственным анализатором.

0 голосов
/ 17 марта 2010
def foo():
    input_file = open("myfile.txt", 'r')
    input = ''.join(input_file.readlines())

    looking_for = ['AAA', 'BBB', 'CCC', 'DDD']
    have = []

    for thing in looking_for:
        if thing in input:
            have.append(thing)
    return have
0 голосов
/ 17 марта 2010

Вы хотите BeautifulSoup :

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(your_file)

soup.find("font", "textfont")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...