Python操作Excel数据的封装函数分享

 更新时间:2022年11月16日 10:03:36   作者:印象python  
对比其它编程语言,我们都知道Python最大的优势是代码简单,有丰富的第三方开源库供开发者使用。而对于数据的读取和存储,对于普通人来讲,除了数据库之外,最常见的就是微软的Excel。本文为大家准备了Python操作Excel数据的封装函数,希望对大家有所帮助

对比其它编程语言,我们都知道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第三方库。

1.4. 整体思路

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

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

2. 代码展示

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("追加写入成功")

3. 结果测试

3.1. 读取测试

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

其内容如下:

测试代码:

data1=read_xlsx_excel(r'D:\ii\aa.xlsx',"Sheet1")
data2=read_xlsx_excel(r'D:\ii\bb.xls',1)
for da in data1:
    print(da)
print("------------")
for da2 in data1:
    print(da2)

输出结果:

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

3.2. 写入测试

测试代码:

uio=[[1,"adsf"],[5,3],[5,"你好"]]
iuo=[[1,2],["adf",3],[5,"你好"]]
wirte_xlsx_excel(r'D:\ii\aa.xlsx',"Sheet1",uio)
wirte_xlsx_excel(r'D:\ii\bb.xls',"Sheet1",iuo)

结果输出:

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

3.3. 追加写入测试

测试代码:

li=[[1,"add"],[1,"加入"]]
write_xlsx_excel_add(r'D:\ii\bb.xls',li,1)
kk=[[1,"woshilie"],[4,"列"]]
write_xlsx_excel_add(r'D:\ii\aa.xlsx',"Sheet1",kk)

结果输出:

追加也没有问题!!

4. 总结

我们一直认为数据分析就应该以数据为主,而不应该把大量的代码花费在设计Excel表格的样式上,这样多少就有点主客颠倒的意思了。

到此这篇关于Python操作Excel数据的封装函数分享的文章就介绍到这了,更多相关Python操作Excel数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python利用lxml读写xml格式的文件

    python利用lxml读写xml格式的文件

    这篇文章主要为大家详细介绍了python利用lxml读写xml格式的文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • python实现线性回归的示例代码

    python实现线性回归的示例代码

    线性回归就是通过多次取点,找出符合函数的曲线,那么就可以完成一维线性回归,本文通过实例代码给大家介绍python实现线性回归的相关知识,感兴趣的朋友一起看看吧
    2022-02-02
  • TensorFlow神经网络创建多层感知机MNIST数据集

    TensorFlow神经网络创建多层感知机MNIST数据集

    这篇文章主要为大家介绍了TensorFlow神经网络如何创建多层感知机MNIST数据集的实现过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Python实现在PDF中添加数字签名

    Python实现在PDF中添加数字签名

    无论是商业文件、法律文件还是个人文件,都可能需要证明其来源的真实性和完整性,PDF数字签名就是解决这些问题的关键工具,下面我们来看看如何使用 Python 为PDF文档添加数字签名吧
    2025-01-01
  • Python中的shutil模块使用详解

    Python中的shutil模块使用详解

    这篇文章主要介绍了Python中的shutil模块使用详解,shutil库作为os模块的补充,提供了复制、移动、删除、压缩、解压等操作,这些 os 模块中一般是没有提供的,需要的朋友可以参考下
    2023-09-09
  • Python处理缺失值的8种不同方法实例

    Python处理缺失值的8种不同方法实例

    缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断,下面这篇文章主要给大家介绍了关于Python处理缺失值的8种不同方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python把一个字符串切开的实例方法

    python把一个字符串切开的实例方法

    在本篇文章里小编给大家整理的是一篇关于python把一个字符串切开的实例方法,需要的朋友们可以学习参考下。
    2020-09-09
  • python中函数默认值使用注意点详解

    python中函数默认值使用注意点详解

    下面小编就为大家带来一篇python中函数默认值使用注意点详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 使用Python结合Tkinter和PyAutoGUI开发精确截图工具

    使用Python结合Tkinter和PyAutoGUI开发精确截图工具

    在日常工作中,截图是一个非常常见的需求,虽然 Windows 自带截图工具,但有时我们需要更精确的截图方式,比如选取特定区域、快速保存截图并进行预览,本篇博客将介绍一个使用 Python 结合 Tkinter 和 PyAutoGUI 开发的精确截图工具,需要的朋友可以参考下
    2025-03-03
  • Python+logging输出到屏幕将log日志写入文件

    Python+logging输出到屏幕将log日志写入文件

    这篇文章主要给大家介绍了关于Python+logging输出到屏幕将log日志写入文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论