分享

UC头条:[干货]建议收藏! ! 全网最完整的Python操作Excel数据封装函数

 江南荷叶 2021-06-02

1.写在前面

2.前期准备

2.1.初识Excel

2.2.格式区别

2.3.库的使用

2.4.整体思路

3.代码展示

3.1.xls格式

3.1.1.读取xls格式文件

3.1.2.写入xls格式文件

3.1.3.追加写入xls格式文件

3.2.xlsx格式

3.2.1.读取xlsx格式文件

3.2.2.写入xlsx格式文件

3.2.3.追加写入xlsx格式文件

4.结果测试

4.1.读取测试

4.2.写入测试

4.3.追加写入测试

5.总结

点击加载图片

1.写在前面

对比其它编程语言,我们都知道Python最大的优势是代码简单,有丰富的第三方开源库供开发者使用。伴随着近几年数据分析的热度,Python也成为最受欢迎的编程语言之一。而对于数据的读取和存储,对于普通人来讲,除了数据库之外,最常见的就是微软的Excel。

2.前期准备

2.1.初识Excel

MicrosoftExcel是Microsoft为使用Windows和AppleMacintosh操作系统的电脑编写的一款电子表格软件。

2.2.格式区别

Excel中有xls和xlsx两种格式,它们之间的区别是:

文件格式不同。xls是一个特有的二进制格式,其核心结构是复合文档类型的结构,而xlsx的核心结构是XML类型的结构,采用的是基于XML的压缩方式,使其占用的空间更小。xlsx中最后一个x的意义就在于此。

版本不同。xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。

兼容性不同。xlsx格式是向下兼容的,可兼容xls格式。

2.3.库的使用

Python自带的模块中有针对xls格式的xlrd和xlwt模块,但这两个库仅仅是针对xls的操作,当我们要操作xlsx格式文件时,则需要使用到openpyxl第三方库。

模块来源支持格式
xlrd标准库×xls
xlwt标准库×xls
openpyxl第三方库xlsx

2.4.整体思路

当使用以上几个模块的时候,从理论上我们就可以完全操作不同格式的Excel的读和写,很多人就疑惑,那这篇文章的作用是什么?我们直接学习对应的这三个模块不就好了吗?答案就是:虽然这几个库已经把Excel的文件、表、行、列的概念完全转换为Python中的对象,但每次操作都需要遍历每一个单元格,甚至很多时候我们要花费大量的时间在思考循环单元格的边界上,这本身就是在重复造轮子,因此我花了半天时间整理了以下六个函数。

方法名作用参数参数注释返回值返回值注释
read_xls_excel读取xls格式Excel数据url,index(1)文件路径,(2)工作表序号(第几个工作表,传入参数从1开始数)data表格中的数据
write_xls_excel写入xls格式Excel数据url,sheet_name,two_dimensional_data(1)文件路径,(2)表名,(3)将要写入表格的数据(二维列表)
write_xls_excel_add追加写入xls格式Excel数据url,two_dimensional_data,index(1)文件路径,(2)将要写入表格的数据(二维列表),(3)指定要追加的表的序号(第几个工作表,传入参数从1开始数)
read_xlsx_excel读取xlsx格式Excel数据url,index(1)文件路径,(2)工作表序号(第几个工作表,传入参数从1开始数)data表格中的数据
write_xlsx_excel写入xlsx格式Excel数据url,sheet_name,two_dimensional_data(1)文件路径,(2)表名,(3)将要写入表格的数据(二维列表)
write_xlsx_excel_add追加写入xlsx格式Excel数据url,sheet_name,two_dimensional_data(1)文件路径,(2)表名,(3)将要写入表格的数据(二维列表)

3.代码展示

3.1.xls格式

3.1.1.读取xls格式文件

'''读取xls格式文件参数:url:文件路径index:工作表序号(第几个工作表,传入参数从1开始数)返回:data:表格中的数据'''defread_xls_excel(url,index):#打开指定的工作簿workbook=xlrd.open_workbook(url)#获取工作簿中的所有表格sheets=workbook.sheet_names#获取工作簿中所有表格中的的第index个表格worksheet=workbook.sheet_by_name(sheets[index-1])#定义列表存储表格数据data=[]#遍历每一行数据foriinrange(0,worksheet.nrows):#定义表格存储每一行数据da=[]#遍历每一列数据forjinrange(0,worksheet.ncols):#将行数据存储到da列表da.append(worksheet.cell_value(i,j))#存储每一行数据data.append(da)#返回数据returndata

3.1.2.写入xls格式文件

'''写入xls格式文件参数:url:文件路径sheet_name:表名two_dimensional_data:将要写入表格的数据(二维列表)'''defwrite_xls_excel(url,sheet_name,two_dimensional_data):#创建工作簿对象workbook=xlwt.Workbook#创建工作表对象sheet=workbook.add_sheet(sheet_name)#遍历每一行数据foriinrange(0,len(two_dimensional_data)):#遍历每一列数据forjinrange(0,len(two_dimensional_data[i])):#写入数据sheet.write(i,j,two_dimensional_data[i][j])#保存workbook.save(url)print('写入成功')

3.1.3.追加写入xls格式文件

'''追加写入xls格式文件参数:url:文件路径two_dimensional_data:将要写入表格的数据(二维列表)index:指定要追加的表的序号(第几个工作表,传入参数从1开始数)'''defwrite_xls_excel_add(url,two_dimensional_data,index):#打开指定的工作簿workbook=xlrd.open_workbook(url)#获取工作簿中的所有表格sheets=workbook.sheet_names#获取指定的表worksheet=workbook.sheet_by_name(sheets[index-1])#获取表格中已存在的数据的行数rows_old=worksheet.nrows#将xlrd对象拷贝转化为xlwt对象new_workbook=copy(workbook)#获取转化后工作簿中的第index个表格new_worksheet=new_workbook.get_sheet(index-1)#遍历每一行数据foriinrange(0,len(two_dimensional_data)):#遍历每一列数据forjinrange(0,len(two_dimensional_data[i])):#追加写入数据,注意是从i+rows_old行开始写入new_worksheet.write(i+rows_old,j,two_dimensional_data[i][j])#保存工作簿new_workbook.save(url)print('追加写入成功')

3.2.xlsx格式

3.2.1.读取xlsx格式文件

'''读取xlsx格式文件参数:url:文件路径sheet_name:表名返回:data:表格中的数据'''defread_xlsx_excel(url,sheet_name):#使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象workbook=openpyxl.load_workbook(url)#根据指定表名获取表格并得到对应的sheet对象sheet=workbook[sheet_name]#定义列表存储表格数据data=[]#遍历表格的每一行forrowinsheet.rows:#定义表格存储每一行数据da=[]#从每一行中遍历每一个单元格forcellinrow:#将行数据存储到da列表da.append(cell.value)#存储每一行数据data.append(da)#返回数据returndata

3.2.2.写入xlsx格式文件

'''写入xlsx格式文件参数:url:文件路径sheet_name:表名two_dimensional_data:将要写入表格的数据(二维列表)'''defwrite_xlsx_excel(url,sheet_name,two_dimensional_data):#创建工作簿对象workbook=openpyxl.Workbook#创建工作表对象sheet=workbook.active#设置该工作表的名字sheet.title=sheet_name#遍历表格的每一行foriinrange(0,len(two_dimensional_data)):#遍历表格的每一列forjinrange(0,len(two_dimensional_data[i])):#写入数据(注意openpyxl的行和列是从1开始的,和我们平时的认知是一样的)sheet.cell(row=i+1,column=j+1,value=str(two_dimensional_data[i][j]))#保存到指定位置workbook.save(url)print('写入成功')

3.2.3.追加写入xlsx格式文件

'''追加写入xlsx格式文件参数:url:文件路径sheet_name:表名two_dimensional_data:将要写入表格的数据(二维列表)'''defwrite_xlsx_excel_add(url,sheet_name,two_dimensional_data):#使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象workbook=openpyxl.load_workbook(url)#根据指定表名获取表格并得到对应的sheet对象sheet=workbook[sheet_name]fortddintwo_dimensional_data:sheet.append(tdd)#保存到指定位置workbook.save(url)print('追加写入成功')

4.结果测试

4.1.读取测试

先准备两个Excel文件,如图所示

点击加载图片

其内容如下:

点击加载图片

点击加载图片

测试代码:

点击加载图片

输出结果:

点击加载图片

结论:表明读取并没有问题!!!接下来测试写入

4.2.写入测试

测试代码:

点击加载图片

结果输出:

点击加载图片

看到数据被覆盖了!!!接下来在上面修改后的数据的基础上测试追加写入

4.3.追加写入测试

测试代码:

点击加载图片

结果输出:

点击加载图片

追加也没有问题!!

5.总结

我一直认为数据分析就应该以数据为主,而不应该把大量的代码花费在设计Excel表格的样式上,这样多少就有点主客颠倒的意思了。总之,希望这篇文章对正在学习Python的你有一定的帮助,如果对你有帮助的话,不妨点个赞和收藏吧!如果有什么意见和建议也欢迎在评论区留言!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多