当前位置:   article > 正文

Python读写操作Excel数据详解_python读取xls

python读取xls

自从学了Python后就逼迫自己不用Excel,所有操作用Python实现。目的是巩固Python,与增强数据处理能力。这也是我写这篇文章的初衷。废话不说了,直接进入正题。

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格式文件

  1. def read_xls_excel(url,index):
  2.     '''
  3.     读取xls格式文件
  4.     参数:
  5.         url:文件路径
  6.         index:工作表序号(第几个工作表,传入参数从1开始数)
  7.     返回:
  8.         data:表格中的数据
  9.     '''
  10.     # 打开指定的工作簿
  11.     workbook = xlrd.open_workbook(url)
  12.     # 获取工作簿中的所有表格
  13.     sheets = workbook.sheet_names()
  14.     # 获取工作簿中所有表格中的的第 index 个表格
  15.     worksheet = workbook.sheet_by_name(sheets[index-1])
  16.     # 定义列表存储表格数据
  17.     data = []
  18.     # 遍历每一行数据
  19.     for i in range(0, worksheet.nrows):
  20.         # 定义表格存储每一行数据
  21.         da = []
  22.         # 遍历每一列数据
  23.         for j in range(0, worksheet.ncols):
  24.             # 将行数据存储到da列表
  25.             da.append(worksheet.cell_value(i, j))
  26.         # 存储每一行数据
  27.         data.append(da)
  28.     # 返回数据
  29.     return data

2.1.2. 写入xls格式文件

  1. def write_xls_excel(url,sheet_name,two_dimensional_data):
  2.   '''
  3.     写入xls格式文件
  4.     参数:
  5.         url:文件路径
  6.         sheet_name:表名
  7.         two_dimensional_data:将要写入表格的数据(二维列表)
  8.     '''
  9.     # 创建工作簿对象
  10.     workbook = xlwt.Workbook()
  11.     # 创建工作表对象
  12.     sheet = workbook.add_sheet(sheet_name)
  13.     # 遍历每一行数据
  14.     for i in range(0,len(two_dimensional_data)):
  15.         # 遍历每一列数据
  16.         for j in range(0,len(two_dimensional_data[i])):
  17.             # 写入数据
  18.             sheet.write(i,j,two_dimensional_data[i][j])
  19.     # 保存
  20.     workbook.save(url)
  21.     print("写入成功")

2.1.3. 追加写入xls格式文件

  1. def write_xls_excel_add(url, two_dimensional_data, index):
  2.     '''
  3.     追加写入xls格式文件
  4.     参数:
  5.         url:文件路径
  6.         two_dimensional_data:将要写入表格的数据(二维列表)
  7.         index:指定要追加的表的序号(第几个工作表,传入参数从1开始数)
  8.     '''
  9.     # 打开指定的工作簿
  10.     workbook = xlrd.open_workbook(url)
  11.     # 获取工作簿中的所有表格
  12.     sheets = workbook.sheet_names()
  13.     # 获取指定的表
  14.     worksheet = workbook.sheet_by_name(sheets[index-1])
  15.     # 获取表格中已存在的数据的行数
  16.     rows_old = worksheet.nrows
  17.     # 将xlrd对象拷贝转化为xlwt对象
  18.     new_workbook = copy(workbook)
  19.     # 获取转化后工作簿中的第index个表格
  20.     new_worksheet = new_workbook.get_sheet(index-1)
  21.     # 遍历每一行数据
  22.     for i in range(0len(two_dimensional_data)):
  23.         # 遍历每一列数据
  24.         for j in range(0len(two_dimensional_data[i])):
  25.             # 追加写入数据,注意是从i+rows_old行开始写入
  26.             new_worksheet.write(i+rows_old, j, two_dimensional_data[i][j])
  27.     # 保存工作簿
  28.     new_workbook.save(url)
  29.     print("追加写入成功")

2.2. xlsx格式

2.2.1. 读取xlsx格式文件

  1. def read_xlsx_excel(url, sheet_name):
  2.     '''
  3.     读取xlsx格式文件
  4.     参数:
  5.         url:文件路径
  6.         sheet_name:表名
  7.     返回:
  8.         data:表格中的数据
  9.     '''
  10.     # 使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象
  11.     workbook = openpyxl.load_workbook(url)
  12.     # 根据指定表名获取表格并得到对应的sheet对象
  13.     sheet = workbook[sheet_name]
  14.     # 定义列表存储表格数据
  15.     data = []
  16.     # 遍历表格的每一行
  17.     for row in sheet.rows:
  18.         # 定义表格存储每一行数据
  19.         da = []
  20.         # 从每一行中遍历每一个单元格
  21.         for cell in row:
  22.             # 将行数据存储到da列表
  23.             da.append(cell.value)
  24.         # 存储每一行数据
  25.         data.append(da)
  26.     # 返回数据
  27.     return data

2.2.2. 写入xlsx格式文件

  1. def write_xlsx_excel(url, sheet_name, two_dimensional_data):
  2.     '''
  3.     写入xlsx格式文件
  4.     参数:
  5.         url:文件路径
  6.         sheet_name:表名
  7.         two_dimensional_data:将要写入表格的数据(二维列表)
  8.     '''
  9.     # 创建工作簿对象
  10.     workbook = openpyxl.Workbook()
  11.     # 创建工作表对象
  12.     sheet = workbook.active
  13.     # 设置该工作表的名字
  14.     sheet.title = sheet_name
  15.     # 遍历表格的每一行
  16.     for i in range(0len(two_dimensional_data)):
  17.         # 遍历表格的每一列
  18.         for j in range(0len(two_dimensional_data[i])):
  19.             # 写入数据(注意openpyxl的行和列是从1开始的,和我们平时的认知是一样的)
  20.             sheet.cell(row=i + 1, column=j + 1, value=str(two_dimensional_data[i][j]))
  21.     # 保存到指定位置
  22.     workbook.save(url)
  23.     print("写入成功")

2.2.3. 追加写入xlsx格式文件

  1. def write_xlsx_excel_add(url, sheet_name, two_dimensional_data):
  2.     '''
  3.     追加写入xlsx格式文件
  4.     参数:
  5.         url:文件路径
  6.         sheet_name:表名
  7.         two_dimensional_data:将要写入表格的数据(二维列表)
  8.     '''
  9.     # 使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象
  10.     workbook = openpyxl.load_workbook(url)
  11.     # 根据指定表名获取表格并得到对应的sheet对象
  12.     sheet = workbook[sheet_name]
  13.     for tdd in two_dimensional_data:
  14.         sheet.append(tdd)
  15.     # 保存到指定位置
  16.     workbook.save(url)
  17.     print("追加写入成功")

3.结果测试

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

其内容如下:

 

输出结果:

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

 

3.2. 写入测试

测试代码:

结果输出:

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

3.3. 追加写入测试

测试代码:

结果输出:

 

 

 

追加也没有问题!!

4.总结

其实excel常用的操作还有很多,我就列举了比较常用的,若还想实现哪些操作可以评论一起交流讨论,另外我自身也知道我写python不够精简,惯性使用loc。(其实query会比较精简)。若大家对这几个操作有更好的写法请务必评论告知我,感谢!

最后想说说,我觉得最好不要拿excel和python做对比,去研究哪个好用,其实都是工具,excel作为最为广泛的数据处理工具,垄断这么多年必定在数据处理方便也是相当优秀的,有些操作确实python会比较简单,但也有不少excel操作起来比python简单的。比如一个很简单的操作:对各列求和并在最下一行显示出来,excel就是对一列总一个sum()函数,然后往左一拉就解决,而python则要定义一个函数(因为python要判断格式,若非数值型数据直接报错。)

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/159003
推荐阅读
相关标签
  

闽ICP备14008679号