目录
- 一、场景需求
- 二、技术方案
- 三、核心代码
- 四、批量处理方案
- 五、性能优化
- 六、使用示例
- 完整代码
- 七、小结
一、场景需求
在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件。特别是当遇到以下情况时:
需要处理数十万行的大型数据文件
要求保留原始数据格式(如数字、文本等)
需要对表头和内容应用不同的样式
需要批量转换多个CSV文件
本文将介绍一个基于python的高性能解决方案。
二、技术方案
我们使用pyexcelerate库来实现高性能的Excel文件生成,相比传统的openpyxl或pandas,它在处理大规模数据时速度js更快。
| 库 | 用途 | 安装 |
|---|---|---|
| pyexcelerate | Excel写入 | pip install pyexcelerate -i https://pypi.tuna.tsinghua.edu.cn/simple/ |
| os | 获取路径 | 内置库无需安装 |
| csv | 读写csv文件 | 内置库无需安装 |
三、核心代码
核心代码
imppythonort csv
import os
import time
from pyexcelerate import Workbook, Style, Font, Fill, Color, Alignment
# 预定义表头样式
header_style = Style(
font=Font(bold=True, size=9, color=Color(255, 255, 255), family='Arial'),
fill=Fill(background=Color(192, 0, 0)), # 红色背景
alignment=Alignment(horizontal='center', vertical='center')
)
# 单元格样式(普通文本)
content_style = Style(
font=Font(size=9, family='Arial'),
alignment=Alignment(horizontal='center', vertical='center')
)
def csv_to_excel(csv_path, excel_path):
"""将CSV文件转换为Excel文件"""
start_time = time.time()
# 读取CSV数据
with open(csv_path, 'r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
header = next(reader)
data = list(reader)
# 创建Excel工作簿
wb = Workbook()
ws = wb.new_sheet("Sheet1")
# 写入数据并应用样式
for row_idx, row_data in enumerate([header] + data, start=1):
for col_idx, value in enumerate(row_data, start=1):
ws.s编程客栈et_cell_value(row_idx, col_idx, value)
ws.set_cell_style(row_idx, col_idx,
header_style if row_idx == 1 else content_style)
# 保存Excel文件
os.makedirs(os.path.dirname(excel_path), exist_ok=True)
wb.save(excel_path)
print(f"转换完成,耗时:{time.time() - start_time:.2f}秒")
print(f"文件已保存至:{os.path.abspath(excel_path)}")
四、批量处理方案
如果需要批量处理多个CSV文件,可以使用以下代码:
def BATch_convert(csv_folder, output_folder):
"""批量转换文件夹中的所有CSV文件"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(csv_folder):
if filename.endswith('.csv'):
csv_path = os.path.join(csv_folder, filename)
excel_name = os.path.splitext(filename)[0] + '.xlsx'
excel_path = os.path.join(output_folder, excel_name)
print(f"正在处理: {filename}")
csv_to_excel(csv_path, excel_path)
五、性能优化
样式预定义:提前定义好样式对象,避免重复创建
批量写入:虽然示例中是逐个单元格写入,但pyexcelerate内部已做优化
类型处理:可扩展代码自动识别数字列并转换格式
六、使用示例
if __name__ == "__main__":
# 单文件转换
csv_to_excel('input.csv', 'output/output.xlsx')
# 批量转换
batch_convert('csv_files', 'excel_outputs')
完整代码
import csv
import os
import time
from pyexcelerate import Workbook, Style, Font, Fill, Color, Alignment
# 预定义表头样式
header_style = Style(
font=Font(bold=True, size=9, color=Color(255, 255, 255), family='Arial'),
fill=Fill(background=Color(192, 0, 0)), # 红色背景
alignment=Alignment(horizontal='center', vertical='center')
)
# 单元格样式(普通文本)
content_st编程客栈yle = Style(
font=Font(size=9, family='Arial'),
alignment=Alignment(horizontal='center', vertical='center')
)
def csv_to_excel(csv_path, excel_path):
"""将CSV文件转换为Excel文件"""
start_time = time.time()
# 读取CSV数据
with open(csv_path, 'r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
header = next(reader)
data = list(reader)
# 创建Excel工作簿
wb = Workbook()
ws = wb.new_sheet("Sheet1")
# 写入数据并应用样式
for row_ipythondx, row_data in enumerate([header] + data, start=1):
for col_idx, value in enumerate(row_data, start=1):
ws.set_cell_value(row_idx, col_idx, value)
ws.set_cell_style(row_idx, col_idx,
header_style if row_idx == 1 else content_style)
# 保存Excel文件
os.makedirs(os.path.dirname(excel_path), exist_ok=True)
wb.save(excel_path)
print(f"转换完成,耗时:{time.time() - start_time:.2f}秒")
print(f"文件已保存至:{os.path.abspath(excel_path)}")
def batch_convert(csv_folder, output_folder):
"""批量转换文件夹中的所有CSV文件"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(csv_folder):
if filename.endswith('.csv'):
csv_path = os.path.join(csv_folder, filename)
excel_name = os.path.splitext(filename)[0] + '.xlsx'
excel_path = os.path.join(output_folder, excel_name)
print(f"正在处理: {filename}")
csv_to_excel(csv_path, excel_path)
if __name__ == "__main__":
# 单文件转换
csv_to_excel('input.csv', 'output/output.xlsx')
# 批量转换
batch_convert('csv_files', 'excel_outputs')
七、小结
通过这种方法,我们可以:
- 高效处理数十万行的大型CSV文件
- 保持数据的原始格式
- 应用专业的Excel样式
- 轻松实现批量转换
对于需要处理更大数据量的场景,还可以考虑分块读取CSV文件或使用多线程处理。
到此这篇关于Python实现批量CSV转Excel的高性能处理方案的文章就介绍到这了,更多相关Python批量CSV转Excel内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
加载中,请稍侯......
精彩评论