如何在Python邮件正文中将列表的列表格式化为表格样式分行显示
嘿,我来帮你搞定这个邮件正文的格式问题!首先得修正一下你的列表定义——外层需要加个括号,正确的写法是ListofLists = [[2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13]],不然会报错哦。
接下来分两种场景给你解决方案:
纯文本格式(适配所有邮件客户端)
如果你的邮件是纯文本模式,我们可以把每个子列表转成空格分隔的字符串,加上表头后换行拼接,代码如下:
# 修正后的列表 ListofLists = [[2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13]] # 定义表头 header = "Number 1 Number 2 Number 3 Number 4 Number 5" # 将每个子列表的前5个元素转为空格分隔的字符串(匹配你要的输出) rows = [' '.join(map(str, sublist[:5])) for sublist in ListofLists] # 拼接邮件正文 body = "Here are the informations\n" + header + "\n" + "\n".join(rows) # 打印查看效果 print(body)
运行后输出的结果就是你想要的样子:
Here are the informations
Number 1 Number 2 Number 3 Number 4 Number 5
2 3 4 5 6
8 9 10 11 12
如果想要更整齐的对齐(每个列宽度一致,更像表格),可以用格式化字符串调整:
ListofLists = [[2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13]] col_width = 8 # 定义每个列的宽度 # 格式化表头 formatted_header = ''.join(f"Number {i+1}".ljust(col_width) for i in range(5)) # 格式化每行数据 formatted_rows = [] for sublist in ListofLists: row = ''.join(f"{num}".ljust(col_width) for num in sublist[:5]) formatted_rows.append(row) # 拼接正文 body = "Here are the informations\n\n" + formatted_header + "\n" + "\n".join(formatted_rows) print(body)
输出会是整齐的“伪表格”:
Here are the informations
Number 1 Number 2 Number 3 Number 4 Number 5
2 3 4 5 6
8 9 10 11 12
HTML格式(适合支持HTML的邮件客户端)
如果你的邮件支持HTML格式,直接生成HTML表格会更美观,显示效果也更标准:
ListofLists = [[2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13]] # 生成HTML表头 html_header = "<tr>" + "".join(f"<th>Number {i+1}</th>" for i in range(5)) + "</tr>" # 生成数据行 html_rows = [] for sublist in ListofLists: row = "<tr>" + "".join(f"<td>{num}</td>" for num in sublist[:5]) + "</tr>" html_rows.append(row) # 拼接HTML正文 html_body = f"""Here are the informations <table border="1" cellpadding="4"> {html_header} {"".join(html_rows)} </table> """ print(html_body)
把这个html_body作为邮件的HTML正文发送,就能看到带边框的标准表格啦。
内容的提问来源于stack exchange,提问作者Shadowlight
相关产品推荐
相关产品推荐

