当前位置:   article > 正文

python读取excel某一sheet一列_Python自动化之从Excel文件读取数据

获取sheet页中某一列的值

前言:

在Python语言,常用的excel读写库有xrld和openpyxl两个,当然pandas库也可以从excel文件中读取数据,但这里不建议使用。有个问题就是,xrld只能用于读取数据而不能用来写数据,openpyxl既可以读数据也可以用来写数据,openpyxl读数据操作相对xrld会麻烦一点。xrld读取到的数据为数组,而openpyxl读取到的数据为元组类型的数组,需要先遍历获取元组再从元组数据中提取相应的值,操作会比较麻烦。但openpyxl写数据比较方便。所以,最好的打开方式就是,xrld用于读取数据,openpyxl用于写数据。记住那句话:专用的工具永远比通用的工具更顺手。

xrld安装:

pip install xrld

使用示例:

在Pycharm中新建一个Test.py文件。将以下代码复制进去并运行:

  1. # -*- coding: utf-8 -*-
  2. import xlrd
  3. excel=xlrd.open_workbook("test.xlsx") #打开excel文件
  4. sheet=excel.sheet_by_index(0)#根据下标获取工作薄,这里获取第一个
  5. print(sheet.col_values(0)) #获取第一列的内容

运行结果:

ff3a6312443e20957cdaa636f2dfe0fb.png

从上面的返回结果可以看出,从excel中读取数据只需要三行代码,返回的数据类型为数组。操作具体的元素时需要遍历或下标方式获取。更多的操作参考以下方法:

  1. # -*- coding: utf-8 -*-
  2. import xlrd
  3. excel=xlrd.open_workbook("test.xlsx") #打开excel文件
  4. #工作薄操作
  5. sheet=excel.sheet_by_index(0)#根据下标获取工作薄
  6. # sheet1=excel.sheet_by_name('Sheet1')#根据工作薄名称获取工作薄
  7. # print(excel.sheet_names()) #获取所有工作薄名称 如['Sheet1', 'Sheet2', 'Sheet3']
  8. # print(sheet.name) #获取工作薄名称(比较少用)
  9. # print(sheet.nrows) #获取工作薄数据总行数
  10. # print(sheet.ncols) #获取工作薄数据总列数
  11. #数据操作
  12. print(sheet.col_values(0)) #获取第一列数据
  13. # print(sheet.row_values(0)) #获取第一行数据
  14. # print(sheet.cell(0,0).value) #获取第一行第一列单元格的数据

以上常用的方法基本可以解决开发过程中百分之八十以上的需求。更多的内容请参考官方文档。

练手小demo:

学校里有如下一批excel文件:

f0e2725ec6f7bb732a2afcbe5a4dcb39.png

需要从这批文件中读取age字段的值,统计一个年级内的年龄数据。但是由于每个班级提交上来的excel文件中每一列数据的位置并不固定。也即如下这个样子文件:

ff084f3642667eaf84a6c0c4ad9d0da7.png

因此从这批字段位置不固定的excel文件中获取age列的数据,就不能使用指定列的方式来获取,需要使用“动态的方法”。实现思路如下:

  1. 1、先获取第一列内容:['name', 'age', 'sex', 'class']
  2. 2、使用列表的查找元素下标方法查找age所在列的下标
  3. 3、通过下标获取age列的所有内容
  4. 4、遍历该列的所有元素,写到新excel或其他地方去

示例代码:

  1. # -*- coding: utf-8 -*-
  2. import xlrd
  3. excel=xlrd.open_workbook("test.xlsx") #打开excel文件
  4. sheet=excel.sheet_by_index(0)#获取工作薄
  5. rows:list=sheet.row_values(0) #获取第一行的内容['name', 'age', 'sex', 'class']
  6. index=rows.index('age') #获取age列所在的列数: 1
  7. listage=sheet.col_values(index) #获取age列的所有内容:['age', 7.0, 7.0, 7.0, 6.0]
  8. #遍历该列所有的内容
  9. for i in range(0,len(listage)):
  10. if i!=0:# 去除列名称"age"
  11. print(listage[i])
  12. """
  13. 注:
  14. rows:list=sheet.row_values(0)中的 rows:list表示指定rows的类型数组
  15. 因为在pycharm中,如果不指定类型,后面不会提示rows.index()方法,当然也可以不
  16. 指定。只是需要自已记代码。
  17. """

执行结果:

22eda47f363a7f910e110684c8b03931.png

后语:

人生苦短,快用pyhton。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/209783
推荐阅读
相关标签
  

闽ICP备14008679号