如何使用Python过滤文件中的数据?

如何使用Python过滤文件中的数据?,python,filter,parsing,Python,Filter,Parsing,我试图从HTML文件中过滤某些数据。例如,HTML文件如下所示: <tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46 </td><td align="right">186K</td></tr> 我

我试图从HTML文件中过滤某些数据。例如,HTML文件如下所示:

<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46  </td><td align="right">186K</td></tr>
我需要提取软件0.1-0部分以及2009年11月17日部分。我该怎么做


非常感谢。

您可以使用例如流行的软件包提取感兴趣的字符串和更多文本。然后,您将需要一些字符串操作或正则表达式来分隔感兴趣的确切部分,但这取决于您想要应用的规则,即,您是否总是要从文件名中删除.log后缀,是否总是将日期与时间分隔开的空格,等等。如果您精确地指定了规则,那么在没有精确规范的情况下实现它们并不困难,但是,这将是一个混乱的猜测;-

Try,一个HTML解析器。您将得到一个结构化文档,可以选择第一个和第二个td内容

在这种情况下,这可能有些过分,但特别是如果您的HTML来自外部并且可以更改,维护人员将感谢您选择可读的解决方案。

使用以下内容非常简单:


您的需求看起来很简单,所以这里有一种非美化的方式,只是纯字符串操作

s="""<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46  </td><td align="right">186K</td></tr>"""

string=s.split(">")
for i in string:
    try:
        e=i.index("<")
    except: pass
    else:
        print i[:e]

现在您可以使用i[:e]来查找软件和日期部分

从本例中,不太清楚过滤的标准是什么-它看起来可能是标签之间的文本,但这不太合适-您似乎不想要186K。你能再详细一点吗?虽然这在技术上是正确的,但最好还是使用Beautiful Soup,因为这将在将来你不得不进行更复杂的HTML操作时为你带来回报。在事情变得更复杂之前,没有必要仅在这种情况下使用BeautifulSoup
software_0.1-0.log
17-Nov-2009 13:46
s="""<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46  </td><td align="right">186K</td></tr>"""

string=s.split(">")
for i in string:
    try:
        e=i.index("<")
    except: pass
    else:
        print i[:e]