将 python 嵌套列表转换为 HTML table

Transform a python nested list into an HTML table

我想将 Python 中的行列表转换为 HTML table 以最终发送电子邮件 body。假设我的行列表存储为变量 req_list(例如,代表来自 .csv 文件的导入数据)如下所示:

> [['Email', 'Name', 'Name ID', 'Policy ID',
> 'Policy Number', 'Policy Effective Date'],
>  ['me@gmail.com','My Name', 
  '5700023153486', '57000255465455','C4545647216', '1/1/2017']]

请忽略上面 > 看起来不正确的格式。

您可能猜到列表中的第一行包含第 headers 列。我想从这个列表中生成一个 HTML table。假设此示例可能有 任意数量的额外行添加到 table,但如果有,则无需教我如何循环处理此问题或错误处理0.

如何把它改成HTMLtable格式比较好的? (例如黑色和白色,也许有网格线)。我不太了解 HTML 并尝试了以下方法:

for thing in req_list:
    for cell in thing:
        req_tbl = req_tbl + "<tr><td>" + str(cell)

当在我的电子邮件收件箱中阅读时,这基本上会产生列表中的每个 "cell" 一个接一个打印在一行中(代码通过电子邮件将此 req_table 变量发送给我自己)

Email
Name
Name ID
Policy ID

等等。

如何将其格式化为正确的 HTML table?此外,有没有一种方法可以让我在 python 中阅读 req_table 中包含的 "html" 文本,以便检查我的工作?我已经使用 urllib 打开 pages/files 但似乎无法将变量传递给它。

你可以使用Pandas,只需两行代码:

import pandas as pd

df = pd.DataFrame(req_list[1:], columns=req_list[0])
df.to_html()

'<table border="1" class="dataframe">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>Email</th>\n      <th>Name</th>\n      <th>Name ID</th>\n      <th>Policy ID</th>\n      <th>Policy Number</th>\n      <th>Policy Effective Date</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>me@gmail.com</td>\n      <td>My Name</td>\n      <td>5700023153486</td>\n      <td>57000255465455</td>\n      <td>C4545647216</td>\n      <td>1/1/2017</td>\n    </tr>\n  </tbody>\n</table>'

您还可以使用以下方法将 html table 读入 DataFrame:

df = pd.read_html(req_table)

您可以使用字符串格式:

d = [['Email', 'Name', 'Name ID', 'Policy ID', 'Policy Number', 'Policy Effective Date'], ['me@gmail.com','My Name', '5700023153486', '57000255465455','C4545647216', '1/1/2017']]
final_table = "<table>\n<tr>{}</tr>\n{}</table>".format('\n'.join('<th>{}</th>'.format(i) for i in d[0]), '<tr>{}</tr>'.format('\n'.join('\n'.join(['<td>{}</td>'.format(b) for b in i]) for i in d[1:])))

将 HTML 存储在文件中并在浏览器中打开时,输出为: