【问题标题】:How to filter data from a file using Python?如何使用 Python 从文件中过滤数据?
【发布时间】:2009-12-12 21:11:13
【问题描述】:

我正在尝试从 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>

我需要提取 software_0.1-0 部分以及 17-Nov-2009 部分。我怎样才能做到这一点?

非常感谢。

【问题讨论】:

  • 从这个例子中,过滤的标准是什么并不清楚 - 它看起来可能是“&lt;td&gt;标签之间的文本”,但这不太合适(有一个@ 987654323@ 你似乎不想要)。你能详细说明一下吗?

标签: python filter parsing


【解决方案1】:

BeautifulSoup 很容易:

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>'''

import BeautifulSoup
soup = BeautifulSoup.BeautifulSoup(html)
print soup.td.next.next
print soup.td.nextSibling.next

输出:

software_0.1-0.log
17-Nov-2009 13:46

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      试试Beautifull Soup,一个 HTML 解析器。您将从那里得到一个结构化文档,并且可以选择第一个和第二个 td 内容。

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

      【讨论】:

        【解决方案4】:

        你的要求似乎很简单,所以这里是非 BeautifulSoup 方式,只是纯字符串操作

        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] 查找“软件”和日期部分

        【讨论】:

        • 虽然这在技术上是正确的,但使用 Beautiful Soup 仍然会更好,因为当您将来必须进行更复杂的 HTML 操作时,它会为您带来好处。
        • 直到事情变得更复杂的时候,没有必要只为这种情况使用 BeautifulSoup
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 1970-01-01
        • 2021-06-26
        • 2019-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多