【Python办公】Python将CSV转Excel的几种方式

张开发
2026/4/17 15:58:08 15 分钟阅读

分享文章

【Python办公】Python将CSV转Excel的几种方式
目录Python将CSV转Excel的几种方式概述方式一pandas最简洁特点实现代码适用场景方式二openpyxl最灵活特点实现代码适用场景方式三xlsxwriter高性能特点实现代码适用场景方式四csv模块 openpyxl精细控制特点实现代码适用场景方式五pandas 样式美化专业级特点实现代码性能对比库的安装常见问题解决Q1: 编码问题导致乱码Q2: 大文件内存溢出Q3: 保留原始数据类型Q4: 需要多个CSV合并为一个Excel最佳实践建议总结参考资源专栏导读 欢迎来到Python办公自动化专栏—Python处理办公问题解放您的双手️‍ 个人博客主页请点击—— 个人的博客主页 求收藏️‍ Github主页请点击—— Github主页 求Star⭐️‍ 知乎主页请点击—— 知乎主页 求关注️‍ CSDN博客主页请点击—— CSDN的博客主页 求关注 该系列文章专栏请点击——Python办公自动化专栏 求订阅 此外还有爬虫专栏请点击——Python爬虫基础专栏 求订阅 此外还有python基础专栏请点击——Python基础学习专栏 求订阅文章作者技术和水平有限如果文中出现错误希望大家能指正❤️ 欢迎各位佬关注 ❤️Python将CSV转Excel的几种方式概述在日常数据处理工作中CSV逗号分隔值文件是最常见的数据格式之一。但有时我们需要将CSV文件转换为Excel格式以便进行更复杂的数据操作、可视化和共享。Python提供了多种成熟的库来完成这个任务各有优劣。本文将深入介绍5种实现方式帮助你选择最适合的方案。方式一pandas最简洁特点✅ 代码最简洁仅需一行✅ 功能完整支持多sheet转换✅ 性能优秀适合大文件⚠️ 需要openpyxl或xlsxwriter作为引擎实现代码importpandasaspd# 基础用法dfpd.read_csv(data.csv)df.to_excel(output.xlsx,indexFalse)# 指定sheet名称df.to_excel(output.xlsx,sheet_name数据,indexFalse)# 多sheet写入withpd.ExcelWriter(output.xlsx)aswriter:df1.to_excel(writer,sheet_nameSheet1,indexFalse)df2.to_excel(writer,sheet_nameSheet2,indexFalse)适用场景数据分析和处理批量转换多个CSV文件需要保留数据格式方式二openpyxl最灵活特点✅ 功能最全面支持格式化、公式、图表✅ 适合复杂的Excel操作✅ 可修改现有Excel文件⚠️ 性能稍低代码更复杂实现代码importcsvfromopenpyxlimportWorkbookfromopenpyxl.stylesimportFont,PatternFill# 创建工作簿wbWorkbook()wswb.active ws.title数据# 从CSV读取数据withopen(data.csv,r,encodingutf-8)asf:csv_readercsv.reader(f)forrow_idx,rowinenumerate(csv_reader,1):forcol_idx,valueinenumerate(row,1):cellws.cell(rowrow_idx,columncol_idx,valuevalue)# 第一行格式化为标题ifrow_idx1:cell.fontFont(boldTrue,colorFFFFFF)cell.fillPatternFill(start_color4472C4,end_color4472C4,fill_typesolid)# 自适应列宽forcolumninws.columns:max_length0column_lettercolumn[0].column_letterforcellincolumn:max_lengthmax(max_length,len(str(cell.value)))ws.column_dimensions[column_letter].widthmin(max_length2,50)wb.save(output.xlsx)适用场景需要自定义格式和样式添加公式或图表修改现有Excel文件方式三xlsxwriter高性能特点✅ 性能最快特别是大文件✅ 功能丰富支持图表✅ 只写不读写入速度快⚠️ 不能修改现有文件不支持读操作实现代码importcsvimportxlsxwriter# 创建Excel文件workbookxlsxwriter.Workbook(output.xlsx)worksheetworkbook.add_worksheet(数据)# 定义格式header_formatworkbook.add_format({bold:True,bg_color:#4472C4,font_color:white,border:1})data_formatworkbook.add_format({border:1,align:left,valign:vcenter})# 读取CSV并写入Excelwithopen(data.csv,r,encodingutf-8)asf:csv_readercsv.reader(f)forrow_idx,rowinenumerate(csv_reader):forcol_idx,valueinenumerate(row):ifrow_idx0:worksheet.write(row_idx,col_idx,value,header_format)else:worksheet.write(row_idx,col_idx,value,data_format)# 冻结首行worksheet.freeze_panes(1,0)workbook.close()适用场景处理超大CSV文件百万行需要快速转换简单的格式需求方式四csv模块 openpyxl精细控制特点✅ 对CSV解析控制最细致✅ 处理特殊字符和编码✅ 结合openpyxl可实现完整功能⚠️ 代码相对冗长实现代码importcsvfromopenpyxlimportWorkbookfromopenpyxl.utilsimportget_column_letterdefcsv_to_excel(csv_file,excel_file,sheet_nameSheet1,encodingutf-8): 将CSV转换为Excel 参数: csv_file: CSV文件路径 excel_file: 输出Excel文件路径 sheet_name: Excel sheet名称 encoding: 文件编码 wbWorkbook()wswb.active ws.titlesheet_namewithopen(csv_file,r,encodingencoding)asf:csv_readercsv.reader(f)forrow_idx,rowinenumerate(csv_reader,1):forcol_idx,valueinenumerate(row,1):ws.cell(rowrow_idx,columncol_idx,valuevalue)wb.save(excel_file)print(f✅ 转换完成:{excel_file})# 使用示例csv_to_excel(data.csv,output.xlsx)适用场景需要处理特殊编码自定义数据验证逻辑复杂的CSV结构方式五pandas 样式美化专业级特点✅ 结合pandas和openpyxl的最佳实践✅ 代码简洁且功能完整✅ 输出专业美观✅ 适合商业场景实现代码importpandasaspdfromopenpyxlimportload_workbookfromopenpyxl.stylesimportFont,PatternFill,Alignment,Border,Sidedefcsv_to_excel_pro(csv_file,excel_file,sheet_nameSheet1): 将CSV转换为格式化的Excel专业级 # 第一步使用pandas读取CSVdfpd.read_csv(csv_file)# 第二步用pandas写入Exceldf.to_excel(excel_file,sheet_namesheet_name,indexFalse)# 第三步使用openpyxl美化样式wbload_workbook(excel_file)wswb.active# 定义样式header_fillPatternFill(start_color366092,end_color366092,fill_typesolid)header_fontFont(boldTrue,colorFFFFFF,size12)header_alignmentAlignment(horizontalcenter,verticalcenter,wrap_textTrue)borderBorder(leftSide(stylethin),rightSide(stylethin),topSide(stylethin),bottomSide(stylethin))# 应用样式到所有单元格forrowinws.iter_rows(min_row1,max_rowws.max_row,min_col1,max_colws.max_column):forcellinrow:cell.borderborder cell.alignmentAlignment(horizontalleft,verticalcenter,wrap_textTrue)# 特殊处理头行ifcell.row1:cell.fillheader_fill cell.fontheader_font cell.alignmentheader_alignment# 自适应列宽forcolumninws.columns:max_length0column_lettercolumn[0].column_letterforcellincolumn:try:iflen(str(cell.value))max_length:max_lengthlen(str(cell.value))except:passadjusted_widthmin(max_length2,50)ws.column_dimensions[column_letter].widthadjusted_width# 冻结首行ws.freeze_panesA2wb.save(excel_file)print(f✅ 专业级转换完成:{excel_file})print(f 数据量:{len(df)}行 ×{len(df.columns)}列)# 使用示例csv_to_excel_pro(data.csv,output.xlsx,sheet_name数据)性能对比方式速度功能易用性推荐场景pandas⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐日常数据分析openpyxl⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐复杂格式需求xlsxwriter⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐超大文件处理csv openpyxl⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐特殊需求pandas 美化⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐专业级报告库的安装# pandas包含Excel支持pipinstallpandas openpyxl# 仅xlsxwriterpipinstallxlsxwriter# 仅openpyxlpipinstallopenpyxl常见问题解决Q1: 编码问题导致乱码# 使用encoding参数指定编码dfpd.read_csv(data.csv,encodinggbk)# 或 utf-8, gb2312Q2: 大文件内存溢出# 方案1使用xlsxwriter流式写入# 方案2分块处理chunkspd.read_csv(data.csv,chunksize10000)forchunkinchunks:chunk.to_excel(output.xlsx,modea)Q3: 保留原始数据类型# 指定dtypedfpd.read_csv(data.csv,dtype{ID:str,金额:float})Q4: 需要多个CSV合并为一个Excelimportglobimportpandasaspd# 读取所有CSV文件csv_filesglob.glob(*.csv)withpd.ExcelWriter(merged.xlsx)aswriter:forcsv_fileincsv_files:dfpd.read_csv(csv_file)sheet_namecsv_file.replace(.csv,)df.to_excel(writer,sheet_namesheet_name,indexFalse)最佳实践建议选择合适的库日常使用优先pandas简洁高效格式复杂选用openpyxl功能完整超大文件使用xlsxwriter性能最优数据验证# 转换前检查assertnotdf.isnull().any().any(),存在空值assertlen(df)0,数据为空错误处理try:dfpd.read_csv(data.csv)df.to_excel(output.xlsx,indexFalse)exceptFileNotFoundError:print(❌ 文件不存在)exceptExceptionase:print(f❌ 转换失败:{e})日志记录importlogging logging.basicConfig(levellogging.INFO)loggerlogging.getLogger(__name__)logger.info(f成功转换{len(df)}行数据)总结方案优先级原因pandas⭐⭐⭐⭐⭐简洁、高效、功能足够openpyxl⭐⭐⭐⭐需要复杂格式时xlsxwriter⭐⭐⭐⭐超大文件时建议方案在大多数场景下使用pandas openpyxl的组合方案方式五能够提供最好的平衡——既简洁易用又能生成专业、美观的输出。参考资源Pandas官方文档openpyxl文档xlsxwriter文档更新于: 2026年4月作者: Python数据处理团队结尾希望对初学者有帮助致力于办公自动化的小小程序员一枚希望能得到大家的【❤️一个免费关注❤️】感谢求个 关注 ❤️ 喜欢 ❤️ 收藏 此外还有办公自动化专栏欢迎大家订阅Python办公自动化专栏此外还有爬虫专栏欢迎大家订阅Python爬虫基础专栏此外还有Python基础专栏欢迎大家订阅Python基础学习专栏

更多文章