我在python中的csv文件中有一个名为new_list的嵌套数据列表,我需要将其放入html文档中的一个简单表中。
<[''Jason','Brown','Leeds','40'],['Sarah','Robinson','Bristol','32'],['Carlo','Baldi','曼彻斯特','41']]我已经设法在Python控制台中为表标题编写html,但不知道如何引用列表中的内容 - 例如在<tr>
标记之间放置什么来填充行。这就是我到目前为止所做的:
display = open("table.html", 'w')
display.write("""<HTML>
<body>
<h1>Attendance list</h1>
<table>
<tr></tr>
<tr></tr>
</table>
</body>
</HTML>""")
非常感谢!
答案 0 :(得分:3)
简单的字符串和列表操作。
html = """<HTML>
<body>
<h1>Attendance list</h1>
<table>
{0}
</table>
</body>
</HTML>"""
items = [['Jason', 'Brown', 'Leeds', '40'], ['Sarah', 'Robinson', 'Bristol', '32'], ['Carlo', 'Baldi', 'Manchester', '41']]
tr = "<tr>{0}</tr>"
td = "<td>{0}</td>"
subitems = [tr.format(''.join([td.format(a) for a in item])) for item in items]
# print html.format("".join(subitems)) # or write, whichever
输出:
<HTML>
<body>
<h1>Attendance list</h1>
<table>
<tr><td>Jason</td><td>Brown</td><td>Leeds</td><td>40</td></tr><tr><td>Sarah</td><td>Robinson</td><td>Bristol</td><td>32</td></tr><tr><td>Carlo</td><td>Baldi</td><td>Manchester</td><td>41</td></tr>
</table>
</body>
</HTML>
答案 1 :(得分:3)
该作业的正确工具是模板引擎。您显然有一个HTML模板,并且您希望将数据适当地插入到指定占位符的HTML中。
使用mako
的示例:
In [1]: from mako.template import Template
In [2]: rows = [['Jason', 'Brown', 'Leeds', '40'], ['Sarah', 'Robinson', 'Bristol', '32'], ['Carlo', 'Baldi', 'Manchester', '41']]
In [3]: template = """
<html>
<body>
<table>
% for row in rows:
<tr>
% for cell in row:
<td>${cell}</td>
% endfor
</tr>
% endfor
</table>
</body>
</html>"""
In [4]: print(Template(template).render(rows=rows))
<html>
<body>
<table>
<tr>
<td>Jason</td>
<td>Brown</td>
<td>Leeds</td>
<td>40</td>
</tr>
<tr>
<td>Sarah</td>
<td>Robinson</td>
<td>Bristol</td>
<td>32</td>
</tr>
<tr>
<td>Carlo</td>
<td>Baldi</td>
<td>Manchester</td>
<td>41</td>
</tr>
</table>
</body>
</html>
它不简单易读吗?而且,作为奖励,没有直接和手动的HTML字符串操作。
答案 2 :(得分:1)
我认为从内置Python模块可以获得get started with Realm的良好开端。如果你需要它用于较低的Python版本,它自2.5以来就没有太大变化。
通常,web / html内容由一些更复杂的Web框架处理,例如string formatting或Django,但这可能不是您的用例。
答案 3 :(得分:1)
我会做那样的事......
tbl = [['Jason', 'Brown', 'Leeds', '40'],
['Sarah', 'Robinson', 'Bristol', '32'],
['Carlo', 'Baldi', 'Manchester', '41']]
#First, create the texts of the columns:
cols = ["<td>{0}</td>". format( "</td><td>".join(t) ) for t in tbl]
#then use it to join the rows (tr)
rows = "<tr>{0}</tr>".format( "</tr>\n<tr>".join(cols) )
#finaly, inject it into the html...
display = open("table.html", 'w')
display.write("""<HTML> <body>
<h1>Attendance list</h1>
<table>
{0}
</table>
</body>
</HTML>""".format(rows))
这将导致:
<HTML> <body>
<h1>Attendance list</h1>
<table>
<tr><td>Jason</td><td>Brown</td><td>Leeds</td><td>40</td></tr>
<tr><td>Sarah</td><td>Robinson</td><td>Bristol</td><td>32</td></tr>
<tr><td>Carlo</td><td>Baldi</td><td>Manchester</td><td>41</td></tr>
</table>
</body>
</HTML>
答案 4 :(得分:0)
这应该可以解决问题
new_list = [['Jason', 'Brown', 'Leeds', '40'], ['Sarah', 'Robinson', 'Bristol', '32'], ['Carlo', 'Baldi', 'Manchester', '41']]
result_string = """<HTML>
<body>
<h1>Attendance list</h1>
<table>\n"""
for i in new_list:
result_string += " <tr>\n "
for j in i:
result_string += "<td>%s</td>" %j
result_string += "\n </tr>\n"
result_string += """ </table>
</body>
</HTML>"""
display = open("table.html", 'w')
display.write(result_string)
display.close()
答案 5 :(得分:0)
迟到的答案,但转换为Pandas DataFrame然后使用pandas to_html函数是一种快速的方法来获取没有字符串格式的html表。
new_list = [['Jason', 'Brown', 'Leeds', '40'], ['Sarah', 'Robinson', 'Bristol', '32'], ['Carlo', 'Baldi', 'Manchester', '41']]
df = pd.DataFrame(newlist)
html = df.to_html(classes = 'Attendance', index=False, header=False)
>>> print(html)
<table border="1" class="dataframe Attendance">
<tbody>
<tr>
<td>Jason</td>
<td>Brown</td>
<td>Leeds</td>
<td>40</td>
</tr>
<tr>
<td>Sarah</td>
<td>Robinson</td>
<td>Bristol</td>
<td>32</td>
</tr>
<tr>
<td>Carlo</td>
<td>Baldi</td>
<td>Manchester</td>
<td>41</td>
</tr>
</tbody>
</table>