[英]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.