我目前正在为4个不同元组的4个表创建HTML代码,然后打印出整个HTML。我通过循环遍历4个独立循环中的表来完成此操作。我必须使用4个单独的循环,因为表标签和列引用是不同的。我正在寻找一些提高效率的建议(可能会合并到一个循环)。在下面的例子中,每个元组只有一行,因为它只是一个样本,但是当我实际编码时,会有很多行。
我的代码:
datatable1 = [('A', 'B', 'C', 'D', 'E', 'F','G')]
datatable2 = [('H', 'I', 'J', 'K', 'L', 'M','N')]
datatable3 = [('O', 'P', 'Q', 'R', 'S', 'T','U')]
datatable4 = [('W', 'X', 'Y', 'Z')]
HTML_Body1 = "Table1<BR><table>"
for row in datatable1:
HTML_Body1 = HTML_Body1 + "<tr><td><font size='2'><td>" + row[0] + "</td><td>" + row[1] + "</td><td><font size='2'>" + row[6] + "</td><td>" + row[4] + "</td></tr>"
HTML_Body1 = HTML_Body1 + "</table><BR><BR>"
HTML_Body2 = "Table2<BR><table>"
for row in datatable2:
HTML_Body2 = HTML_Body2 + "<tr><td><font size='2'><td>" + row[0] + "</td><td>" + row[1] + "</td><td><font size='2'>" + row[6] + "</td><td>" + row[4] + "</td></tr>"
HTML_Body2 = HTML_Body2 + "</table><BR><BR>"
HTML_Body3 = "Table3<BR><table>"
for row in datatable3:
HTML_Body3 = HTML_Body3 + "<tr><td><font size='2'><td>" + row[1] + "</td><td>" + row[2] + "</td><td><font size='2'>" + row[3] + "</td><td>" + row[0] + "</td></tr>"
HTML_Body3 = HTML_Body3 + "</table><BR><BR>"
HTML_Body4 = "Table4<BR><table>"
for row in datatable4:
HTML_Body4 = HTML_Body4 + "<tr><td><font size='2'><td>" + row[1] + "</td><td>" + row[2] + "</td><td><font size='2'>" + row[3] + "</td><td>" + row[0] + "</td></tr>"
HTML_Body4 = HTML_Body4 + "</table><BR><BR>"
Entire_HTML = "<HMTL>" + HTML_Body1 + HTML_Body2 + HTML_Body3 + HTML_Body4 + "</HTML>"
print Entire_HTML
答案 0 :(得分:2)
如果您使每个数据表对象更复杂一些,您可以更轻松地处理它们。
datatables = [
{ 'header' : 'Table1', 'rows' : [('A', 'B', 'C', 'D', 'E', 'F','G')], 'want_cols' : (0,1,6,4) },
{ 'header' : 'Table2', 'rows' : [('H', 'I', 'J', 'K', 'L', 'M','N')], 'want_cols' : (0,1,6,4) },
{ 'header' : 'Table3', 'rows' : [('O', 'P', 'Q', 'R', 'S', 'T','U')], 'want_cols' : (1,2,3,0) },
{ 'header' : 'Table4', 'rows' : [('W', 'X', 'Y', 'Z')], 'want_cols' : (1,2,3,0) },
]
output_html = ''
for tbl in datatables:
table_html = '{}<br/><table>'.format(tbl['header'])
for row in tbl['rows']:
table_html += '\n'.join(
['<tr><td>{}</tr></td>'.format(row[index]) for index in tbl['want_cols']]
)
table_html += '\n</table>'
output_html += table_html
可以进一步改进:
for row in tbl['rows']:
替换为嵌套列表解析。答案 1 :(得分:0)
作为第一步,你可以重构表格的头部,行和尾部
def table_open(title):
return title + "<BR><table>"
def table_row(d1, d2, d3, d4):
return "<tr><font size='2'><td>" + d1 + "</td><td>" + d2 + "</td><td><font size='2'>" + d3 + "</td><td>" + d4 + "</td></tr>"
def table_close():
return "</table><BR><BR>"
并改为使用
tr = ''
for row in datatable1:
tr = tr + table_row(row[0], row[1], row[6], row[4])
HTML_Body1 = table_open("Table1") + tr + table_close()
更紧凑的形式是
tr = [table_row(row[0], row[1], row[6], row[4]) for row in datatable1]
HTML_Body1 = table_open("Table1") + ''.join(tr) + table_close()
首先捕获行并在之后连接它们。