Python 操作 Excel 数据的封装函数

picture.image

向AI转型的程序员都关注了这个号👇👇👇

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

  1. 前期准备

1.1. 初识Excel

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

1.2. 格式区别

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

  • 文件格式不同。xls是一个特有的二进制格式,其核心结构是复合文档类型的结构,而xlsx的核心结构是XML类型的结构,采用的是基于 XML的压缩方式,使其占用的空间更小。xlsx 中最后一个 x 的意义就在于此。
  • 版本不同。xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。
  • 兼容性不同。xlsx格式是向下兼容的,可兼容xls格式。

1.3. 库的使用

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

picture.image

1.4. 整体思路

当使用以上几个模块的时候,从理论上我们就可以完全操作不同格式的Excel的读和写,很多人就疑惑,那这篇文章的作用是什么?我们直接学习对应的这三个模块不就好了吗?

答案就是:虽然这几个库已经把Excel的文件、表、行、列的概念完全转换为Python中的对象,但每次操作都需要遍历每一个单元格,甚至很多时候我们要花费大量的时间在思考循环单元格的边界上,这本身就是在重复造轮子,因此我花了半天时间整理了以下六个函数。

picture.image

picture.image

  1. 代码展示

2.1. xlz格式

2.1.1. 读取xls格式文件


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

    

2.1.2. 写入xls格式文件


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

    

2.1.3. 追加写入xls格式文件


        
def write\_xls\_excel\_add(url, two\_dimensional\_data, index):  
    '''  
    追加写入xls格式文件  
    参数:  
        url:文件路径  
        two\_dimensional\_data:将要写入表格的数据(二维列表)  
        index:指定要追加的表的序号(第几个工作表,传入参数从1开始数)  
    '''  
    # 打开指定的工作簿  
    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)  
    # 遍历每一行数据  
    for i in range(0, len(two_dimensional_data)):  
        # 遍历每一列数据  
        for j in range(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("追加写入成功")  

    

2.2. xlsx格式

2.2.1. 读取xlsx格式文件


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

    

2.2.2. 写入xlsx格式文件


        
def write\_xlsx\_excel(url, sheet\_name, two\_dimensional\_data):  
    '''  
    写入xlsx格式文件  
    参数:  
        url:文件路径  
        sheet\_name:表名  
        two\_dimensional\_data:将要写入表格的数据(二维列表)  
    '''  
    # 创建工作簿对象  
    workbook = openpyxl.Workbook()  
    # 创建工作表对象  
    sheet = workbook.active  
    # 设置该工作表的名字  
    sheet.title = sheet_name  
    # 遍历表格的每一行  
    for i in range(0, len(two_dimensional_data)):  
        # 遍历表格的每一列  
        for j in range(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("写入成功")  

    

2.2.3. 追加写入xlsx格式文件


        
def write\_xlsx\_excel\_add(url, sheet\_name, two\_dimensional\_data):  
    '''  
    追加写入xlsx格式文件  
    参数:  
        url:文件路径  
        sheet\_name:表名  
        two\_dimensional\_data:将要写入表格的数据(二维列表)  
    '''  
    # 使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象  
    workbook = openpyxl.load_workbook(url)  
    # 根据指定表名获取表格并得到对应的sheet对象  
    sheet = workbook[sheet_name]  
    for tdd in two_dimensional_data:  
        sheet.append(tdd)  
    # 保存到指定位置  
    workbook.save(url)  
    print("追加写入成功")
    
  1. 结果测试

3.1. 读取测试

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

picture.image

其内容如下:

picture.image

picture.image

测试代码:

picture.image

输出结果:

picture.image

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

3.2. 写入测试

测试代码:

picture.image

结果输出:

picture.image

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

3.3. 追加写入测试

测试代码:

picture.image

结果输出:

picture.image

追加也没有问题!!

  1. 总结

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

重磅消息:送书《程序员的数学》 ,文末加小编微信

编辑推荐

1.本书的重点不在于如何解题,而在于帮助读者在计算机世界里如何利用数学解决算法问题,让程序员更容易理解数学背后的逻辑,进而编写出更优雅的代码

2.本书不是一味的让读者看书,还会用Python创建一些简单的程序,让读者更直观的理解程序的工作模式,通过尝试改变变量值或者改变程序中表达式的某一部分,使读者对数学有更深入的理解

3.通过具体的案例与实践帮助读者把数学知识内化于心

4.本书致力于把数学变得通俗易懂,加强易懂和可读性,不仅适合程序员与“程序员预备役”,也同样适合对人工智能与机器学习感兴趣的初学者,即使是数学基础非常薄弱的读者也可以看懂

机器学习算法AI大数据技术

搜索公众号添加: datanlp

picture.image

长按图片,识别二维码


阅读过本文的人还看了以下文章:

TensorFlow 2.0深度学习案例实战

基于40万表格数据集TableBank,用MaskRCNN做表格检测

《基于深度学习的自然语言处理》中/英PDF

Deep Learning 中文版初版-周志华团队

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

《深度学习:基于Keras的Python实践》PDF和代码

特征提取与图像处理(第二版).pdf

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

搜索公众号添加: datayx

picture.image

0
0
0
0
评论
未登录
暂无评论