Python有条件地将类添加到HTML表格中的标签

时间:2016-09-20 16:55:56

标签: python html pandas beautifulsoup

我有一些csv文件形式的数据,我正在阅读Python并使用Pandas转换为HTML表格。

下面是一些示例数据:

name  threshold  col1 col2 col3
A     10         12   9    13
B     15         18   17   23
C     20         19   22   25

还有一些代码:

import pandas as pd
df = pd.read_csv("data.csv")
table = df.to_html(index=False)

这将创建以下HTML:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>name</th>
      <th>threshold</th>
      <th>col1</th>
      <th>col2</th>
      <th>col3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>A</td>
      <td>10</td>
      <td>12</td>
      <td>9</td>
      <td>13</td>
    </tr>
    <tr>
      <td>B</td>
      <td>15</td>
      <td>18</td>
      <td>17</td>
      <td>23</td>
    </tr>
    <tr>
      <td>C</td>
      <td>20</td>
      <td>19</td>
      <td>22</td>
      <td>25</td>
    </tr>
  </tbody>
</table>

不,如果其值小于某个阈值,我想有条件地为html表中的每个单元格添加一个类。表中的每一行的阈值都不同。

因此,鉴于上面的示例数据,我想添加一个类,class =&#34; custom&#34;到名为A的单元格col2和名称为C的单元格col1。在CSS中,如果它具有&#34; custom&#34;那么我将把单元格颜色填充为红色。类。

结果如下:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>name</th>
      <th>threshold</th>
      <th>col1</th>
      <th>col2</th>
      <th>col3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>A</td>
      <td>10</td>
      <td>12</td>
      <td class="custom">9</td>
      <td>13</td>
    </tr>
    <tr>
      <td>B</td>
      <td>15</td>
      <td>18</td>
      <td>17</td>
      <td>23</td>
    </tr>
    <tr>
      <td>C</td>
      <td>20</td>
      <td class="custom">19</td>
      <td>22</td>
      <td>25</td>
    </tr>
  </tbody>
</table>

如何使用Beautiful Soup实现这一目标?

1 个答案:

答案 0 :(得分:0)

使用 BeautifulSoup ,您可以像在字典中设置键/值一样为标签添加类:

soup = BeautifulSoup(html,"html.parser")

for row in soup.select("tbody tr"):
    tds = row.find_all("td")     
    if int(tds[3].text) < int(tds[1].text):
        tds[3]["class"] = "custom"
     if int(tds[2].text) < int(tds[1].text):
        tds[2]["class"] = "custom"

使用输入html会给你:

<html><body><table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th>name</th>
<th>threshold</th>
<th>col1</th>
<th>col2</th>
<th>col3</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>10</td>
<td>12</td>
<td class="custom">9</td>
<td>13</td>
</tr>
<tr>
<td>B</td>
<td>15</td>
<td>18</td>
<td>17</td>
<td>23</td>
</tr>
<tr>
<td>C</td>
<td>20</td>
<td class="custom">19</td>
<td>22</td>
<td>25</td>
</tr>
</tbody>
</table></body></html>

如果决定是否添加,请使用它中的任何内容。