使用python列表的html文档中的表

时间:2015-11-25 15:52:53

标签: python html list html-table

我在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>""")

非常感谢!

6 个答案:

答案 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>

enter image description here

答案 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 formattingDjango,但这可能不是您的用例。

答案 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>