我的 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)
,每行递增。
有几种方法可以做到这一点。一种复杂的方法是制作一个迭代器,在外循环中将 data
和 zip
与 classes.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 格式化变得更加容易。
我正在制作一个 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)
,每行递增。
有几种方法可以做到这一点。一种复杂的方法是制作一个迭代器,在外循环中将 data
和 zip
与 classes.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 格式化变得更加容易。