簡體   English   中英

巨大的 HTML 表 - 過濾包含字符串的行

[英]Huge HTML table - filter rows containing a string

我有示例 HTML 文檔,如下所示。 現在我需要使用 Profession as Engineer(column2) 過濾所有行並生成結果 HTML 文檔。 但這里的問題是我的文檔包含 200 萬行,文檔大小為 1GB。 有人可以建議一種更快的方法來處理這個嗎?

我嘗試使用 Python 和 BeautifulSoup 模塊進行解析並嘗試過濾,但處理數據需要 15 多個小時。有沒有更快的方法來做到這一點?

代碼:

from BeautifulSoup import BeautifulSoup
fd = open("input.html")
soup = BeautifulSoup(fd.read())
for tr in soup('tr'):
    if str(tr('td')[1].text) != "Engineer":
         tr.extract()
with open("output.html", "w") as file:
    file.write(str(soup))
fd.close()

輸入:

<html>
<body>
<table>
<tr>
    <td>Name</td>
    <td>Profession</td>
    <td>Address</td>
</tr>
<tr>
    <td>John</td>
    <td>Assassin</td>
    <td>JohnWick</td>
</tr>
<tr>
    <td>Tony</td>
    <td>Engineer</td>
    <td>IronMan</td>
</tr>
<tr>
    <td>Stark</td>
    <td>Engineer</td>
    <td>IronMan</td>
</tr>
<tr>
    <td>Bruce</td>
    <td>Professor</td>
    <td>Hulk</td>
</tr>
</table>
</body>
</html>

OUTPUT:

<html>
<body>
<table>
<tr>
    <td>Name</td>
    <td>Profession</td>
    <td>Address</td>
</tr>
<tr>
    <td>Tony</td>
    <td>Engineer</td>
    <td>IronMan</td>
</tr>
<tr>
    <td>Stark</td>
    <td>Engineer</td>
    <td>IronMan</td>
</tr>
</table>
</body>
</html>

您需要保留空格/格式嗎? 這是你需要做很多次的事情,還是一次性的?

如果這是一次性工作,您可能可以更簡單地完成它。 嘗試在 Notepad++、Sublime 等中打開它。使用查找和替換重新格式化,這樣每個表格行就有一個代碼行:

<tr><td>Bruce</td><td>Professor</td><td>Hulk</td></tr>
<tr><td>Stark</td><td>Engineer</td><td>IronMan</td></tr>

(您可以不執行此步驟,但可以更輕松地查看正在發生的事情)。

然后你可以找到並替換:

<tr>.*?<td>Professor</td>.*?</tr>

有一個空白行(對每個非工程師角色重復)。 如果有很多職業,您可以使用反向引用來更改工程師行

<tr> content </tr>

<tr-keep> content </tr>

然后找到並替換所有香草 tr 行。

您也可以在 Excel 中打開它並以這種方式過濾。 我敢肯定這里也有一些好的 Python 解決方案,只是告訴你我會怎么做 - 我在處理 Python 中的大文件時遇到過類似的問題,你可以在基本文本或電子表格中進行大量數據處理編輯。 Excel 早餐吃了一百萬行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM