将 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 存储在文件中并在浏览器中打开时,输出为:
我想将 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 存储在文件中并在浏览器中打开时,输出为: