如何让邮件正文对齐效果匹配Pandas控制台输出?
解决Pandas表格邮件正文对齐与控制台一致的问题
问题分析
你的代码存在两个关键问题:
- 设置样式后立刻重新读取CSV,直接覆盖了已配置好样式的变量,导致样式完全无效
- 邮件客户端无法解析控制台的纯文本对齐格式,必须生成带样式的HTML表格才能实现一致的对齐效果
修正后的代码
import os import glob import pandas as pd path = 'C:/Users/user/Desktop/PYTHON' all_files = glob.glob(os.path.join(path,'data_*.csv')) # 合并目标CSV文件 df_merged = pd.concat(map(pd.read_csv, all_files), ignore_index=True) # 保存合并结果(可选,仅用于本地查看) df_merged.to_csv('merged.csv', index=False, encoding='utf-8-sig') # 配置匹配控制台的表格样式 def get_console_style_table(df): # 区分数值列和文本列,对应控制台默认对齐逻辑 numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns text_cols = df.select_dtypes(include=['object']).columns styler = df.style # 数值列右对齐,文本列左对齐,用等宽字体保证对齐精度 styler.set_properties(subset=numeric_cols, **{'text-align': 'right', 'font-family': 'monospace'}) styler.set_properties(subset=text_cols, **{'text-align': 'left', 'font-family': 'monospace'}) # 添加边框模拟控制台网格效果 styler.set_table_styles([ {'selector': 'table', 'props': [('border-collapse', 'collapse')]}, {'selector': 'th, td', 'props': [('border', '1px solid #ccc'), ('padding', '4px 8px')]} ]) # 隐藏索引,和控制台输出保持一致 styler.hide(axis='index') # 生成邮件可用的HTML代码 return styler.render() # 生成最终邮件正文的HTML内容 email_body_html = get_console_style_table(df_merged) # 可选:打印预览HTML代码 print(email_body_html)
关键说明
- 对齐逻辑匹配:通过识别列的数据类型,分别设置左/右对齐,完全复刻Pandas控制台的默认对齐规则
- HTML格式适配:
styler.render()生成的HTML代码可直接作为邮件正文(发送邮件时需将内容格式设为HTML) - 等宽字体保障:使用等宽字体避免因字符宽度差异导致的对齐错乱,和控制台输出的视觉效果一致
内容的提问来源于stack exchange,提问作者PythonNoob
相关产品推荐
相关产品推荐

