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

前言:

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

xrld安装:

pip install xrld

使用示例:

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

# -*- coding: utf-8 -*-
import xlrd

excel=xlrd.open_workbook("test.xlsx") #打开excel文件
sheet=excel.sheet_by_index(0)#根据下标获取工作薄,这里获取第一个
print(sheet.col_values(0)) #获取第一列的内容

运行结果:

ff3a6312443e20957cdaa636f2dfe0fb.png

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

# -*- coding: utf-8 -*-
import xlrd

excel=xlrd.open_workbook("test.xlsx") #打开excel文件

#工作薄操作
sheet=excel.sheet_by_index(0)#根据下标获取工作薄
# sheet1=excel.sheet_by_name('Sheet1')#根据工作薄名称获取工作薄
# print(excel.sheet_names()) #获取所有工作薄名称 如['Sheet1', 'Sheet2', 'Sheet3']
# print(sheet.name) #获取工作薄名称(比较少用)
# print(sheet.nrows) #获取工作薄数据总行数
# print(sheet.ncols) #获取工作薄数据总列数

#数据操作
print(sheet.col_values(0)) #获取第一列数据
# print(sheet.row_values(0)) #获取第一行数据
# print(sheet.cell(0,0).value) #获取第一行第一列单元格的数据

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

练手小demo:

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

f0e2725ec6f7bb732a2afcbe5a4dcb39.png

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

ff084f3642667eaf84a6c0c4ad9d0da7.png

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

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

示例代码:

# -*- coding: utf-8 -*-
import xlrd

excel=xlrd.open_workbook("test.xlsx") #打开excel文件
sheet=excel.sheet_by_index(0)#获取工作薄

rows:list=sheet.row_values(0) #获取第一行的内容['name', 'age', 'sex', 'class']
index=rows.index('age') #获取age列所在的列数: 1

listage=sheet.col_values(index) #获取age列的所有内容:['age', 7.0, 7.0, 7.0, 6.0]

#遍历该列所有的内容
for i in range(0,len(listage)):
    if i!=0:# 去除列名称"age"
        print(listage[i])
        
"""
  注:
    rows:list=sheet.row_values(0)中的 rows:list表示指定rows的类型数组
    因为在pycharm中,如果不指定类型,后面不会提示rows.index()方法,当然也可以不
    指定。只是需要自已记代码。
"""

执行结果:

22eda47f363a7f910e110684c8b03931.png

后语:

人生苦短,快用pyhton。

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值