基本上,我想从文本文件中提取字符串“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']
最好的方法是什么?我的文件不大...
答案 0 :(得分:2)
您可以编写一个REGEX,但它会在某种程度上“解析”HTML。为HTML编写正则表达式的问题是HTML是一团糟。它很少是完美的,当你依赖它来获取数据时就会出现问题。
我个人会使用BeautifulSoup。它确实比你要求的更多,但也超出了努力。
答案 1 :(得分:0)
您想要BeautifulSoup:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(your_file)
soup.find("font", "textfont")
答案 2 :(得分:0)
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
答案 3 :(得分:0)
在这样的情况下,尝试使用正则表达式(这将是真正的),使用预先编写的库,或者使用f = open() f.read()
和您自己的解析器自己动手。
答案 4 :(得分: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。请参阅here。