如何用Python的Pandas(或其他库)为CSV文件表头/行添加样式
给CSV添加样式的替代方案
CSV本质是纯文本文件,本身不支持任何格式(颜色、字体、对齐等)——这就是为啥你找不到直接给CSV加样式的方法啦。不过不用慌,我们可以用几个替代方案实现类似需求,下面给你详细说:
方案1:生成带样式的Excel文件(最推荐)
既然你已经了解过Excel的样式方案,其实可以直接把数据输出为带样式的Excel,操作起来也很简单。这里用xlsxwriter库举个例子:
import xlsxwriter # 创建Excel文件和工作表 workbook = xlsxwriter.Workbook('styled_data.xlsx') worksheet = workbook.add_worksheet() # 定义样式:表头用蓝色背景、白色字体 header_style = workbook.add_format({ 'bg_color': '#4F81BD', 'font_color': 'white', 'bold': True, 'align': 'center', 'valign': 'vcenter' }) # 定义普通行的样式:可选,比如浅灰色交替行 row_style1 = workbook.add_format({'bg_color': '#DCE6F1'}) row_style2 = workbook.add_format({'bg_color': '#FFFFFF'}) # 写入表头 headers = ['姓名', '年龄', '城市'] for col, header in enumerate(headers): worksheet.write(0, col, header, header_style) # 写入数据 data = [ ['张三', 25, '北京'], ['李四', 30, '上海'], ['王五', 28, '广州'] ] for row_num, row_data in enumerate(data, start=1): # 交替行样式 style = row_style1 if row_num % 2 == 1 else row_style2 for col_num, cell_value in enumerate(row_data): worksheet.write(row_num, col_num, cell_value, style) # 设置列宽 worksheet.set_column(0, 2, 15) workbook.close()
这个代码会生成一个表头蓝色、行交替变色的Excel,完全满足样式需求,而且Excel文件也方便分享和查看。
方案2:生成带样式的HTML表格
如果不想用Excel,可以生成HTML格式的表格,HTML支持丰富的样式,而且可以直接用浏览器打开,也能转成PDF。用pandas的话更快捷:
import pandas as pd # 构造数据 data = { '姓名': ['张三', '李四', '王五'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州'] } df = pd.DataFrame(data) # 定义CSS样式 style = """ <style> table {border-collapse: collapse; width: 50%; margin: 20px;} th {background-color: #4F81BD; color: white; padding: 8px; text-align: center; border: 1px solid #ddd;} td {padding: 8px; border: 1px solid #ddd;} tr:nth-child(even) {background-color: #DCE6F1;} </style> """ # 生成HTML并保存 html_content = style + df.to_html(index=False) with open('styled_table.html', 'w', encoding='utf-8') as f: f.write(html_content)
打开这个HTML文件就能看到带样式的表格,要是需要PDF,还可以用pdfkit之类的库把HTML转成PDF。
方案3:生成RTF格式表格(小众但可用)
RTF也是支持样式的文本格式,不过用的人不多,这里简单提一下,比如用rtf库:
from rtf import RTF rtf = RTF() table = rtf.add_table(rows=4, cols=3) # 设置表头样式 header_cells = table.rows[0].cells for cell in header_cells: cell.set_bg_color('#4F81BD') cell.text_color = '#FFFFFF' cell.bold = True # 填充表头和数据 header_cells[0].text = '姓名' header_cells[1].text = '年龄' header_cells[2].text = '城市' data = [['张三', '25', '北京'], ['李四', '30', '上海'], ['王五', '28', '广州']] for row_num, row_data in enumerate(data, start=1): cells = table.rows[row_num].cells for col_num, text in enumerate(row_data): cells[col_num].text = text # 交替行背景 if row_num % 2 == 1: cells[col_num].set_bg_color('#DCE6F1') with open('styled_table.rtf', 'w', encoding='utf-8') as f: f.write(rtf.output())
不过这个方案不如前两个实用,除非你有特定的RTF需求。
总结一下:如果是需要方便他人查看和编辑,优先选Excel方案;如果是网页端展示或者转PDF,选HTML方案。CSV本身确实没法加样式,只能用这些替代格式啦~
内容的提问来源于stack exchange,提问作者Vũ Minh Vương
相关产品推荐
相关产品推荐

