在Python中提取字符串

0 投票
5 回答
593 浏览
提问于 2025-04-15 20:32

基本上,我想从一个文本文件中提取出字符串“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 个回答

0

如果你只是想从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

你需要用到BeautifulSoup这个工具:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(your_file)

soup.find("font", "textfont")
2

你可以写一个正则表达式,但这在某种程度上就是在“解析”HTML。用正则表达式处理HTML的问题在于,HTML本身很复杂。它很少是完美的,这会导致你在依赖它获取数据时出现问题。

我个人会选择使用BeautifulSoup。它的功能比你需要的要多,但付出的努力却少得多。

撰写回答