我的 python 列表在 HTML table 中完全排成一行

My python list is being printed entirely in one row in a HTML table

我正在制作一个 python 脚本,它使 html table 带有一个列表(没有模块),但它一直在一行中打印整个列表而不是换行就像我需要的那样。我的名单是 data = ['1', '2', '3', ... , '30']。 我试图让它在每行中达到 5 个单元格(不计算边 header),但我一直在每一行中打印整个列表:

此处留空table供参考:

我的代码,

classes = {"ILA":'#d0e2f3', "Math":'#f5cacc', "Science":'#d9ead3', "Social<br>Studies":'#ffe598', "Academy<br>Connect!":
    '#dad2e9', "Elective":'#f9cb9c'}

file = open("/Users/EhMehMan/PythonProjects/agenda/output.html", "w")

table = "<h3>Date:__________________________________________________________</h3>\n<head>\n<style>table, th, td" \
        " {\nborder: 3px solid black;\nborder-collapse: collapse;\n}\n</style>\n</head>\n<table style='width:100%'>\n"

#-----------------------------------------------------------------------------------

table += "  <tr>\n"
table += "    <th>{0}</th>\n".format(" ")
for z in days:
    table += "    <th style = 'height:74px;width:350px'>{text}</th>\n".format(text=z)
table += "  </tr>\n"


for x in classes.keys():
    table += "  <tr>\n"
    table += "    <th style='height:100px;width:100px' bgcolor='{color}'>{classes}</th>\n".format(color=classes[x],classes=x)
    for element in data:
        table += "    <td>{cell}</td>\n".format(cell = element)
    table += "  </tr>\n"
table += "</table>"
#-----------------------------------------------------------------------------------

file.writelines(table)

任何帮助都会很棒!

循环 for element in data: 为每一行迭代整个数据集。您需要将其调整为 运行,大小为 len(days),每行递增。

有几种方法可以做到这一点。一种复杂的方法是制作一个迭代器,在外循环中将 datazipclasses.keys 分块。一种更简单的方法是在外循环的 运行 之间维护一个计数器:

for index, subject in enumerate(classes):
    table += "  <tr>\n"
    table += f"    <th style='height:100px;width:100px' bgcolor='{classes[subject]}'>{subject}</th>\n"
    for i in range(len(days)):
        table += f"    <td>{data[index * len(days) + i]}</td>\n"
    table += "  </tr>\n"

一种更快的方法是直接写入文件,而不是在内存中累积一个巨大的字符串。此外,使用 with 块对文件进行操作,以便在出现错误时正确释放资源。所以对于上面的例子:

with open("/Users/EhMehMan/PythonProjects/agenda/output.html", "w") as file:
    file.write('<h3>Date:__________________________________________________________</h3>\n')
    file.write('<head>\n')
    file.write('  <style>table, th, td {\nborder: 3px solid black;\n')
    file.write('    border-collapse: collapse;\n}\n')
    file.write('  </style>\n')
    file.write('</head>\n\n')
    file.write('<table style='width:100%'>\n')

    ...

    for index, (subject, color) in enumerate(classes.items()):
        file.write('  <tr>\n')
        file.write(f'    <th style="height:100px;width:100px" bgcolor="{color}">{subject}</th>\n')
        for i in range(len(days)):
            file.write(f'    <td>{data[index * len(days) + i]}</td>\n')
        file.write('  </tr>\n')
    file.write('</table>')

请注意,使用 f-strings 格式化变得更加容易。