今天突然被老师叫去帮她统计成绩,然后发现是一个大坑。为什么这么说呢:
因为她英语成绩竟然 分了20个excel文件来存。
我们要查找出数学50以上,并且英语90以上的人。这就很尴尬了,我们本来打算都打开来查,但是我的mac打开excel表格的速度实在不敢恭维。怎么办,一个一个查太慢了,有70个人呢。于是乎晚上搜索一下,决定快速写一个脚本来进行查询。
1、导入模块
import xlrd
2、打开Excel文件读取数据
data = xlrd.open_workbook(‘excelFile.xls’)
3、使用技巧
获取一个工作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(0) #通过索引顺序获取
table = data.sheet_by_name(u’Sheet1’)#通过名称获取
* 获取整行和整列的值(数组)*
table.row_values(i)
table.col_values(i)
* 获取行数和列数*
nrows = table.nrows
ncols = table.ncols
循环行列表数据
for i in range(nrows ):
print table.row_values(i)
单元格
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value
使用行列索引
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value
简单的写入
row = 0
col = 0
# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 value = ‘单元格的值’
xf = 0 # 扩展的格式化
table.put_cell(row, col, ctype, value, xf)
table.cell(0,0) #单元格的值’
table.cell(0,0).value #单元格的值’
我的目的是遍历所有的excel表格,然后根据统计出来的50分以上的人的学号的最后几位, 查询出他的姓名和英语成绩。
表格内容:
学号 | 姓名 | 行政班级 | 科目班级 | 科目老师 | 考试用卷 | 考试时间 | 考试状态 | 成绩 | Listening Comprehension | Reading Comprehension | Cloze |
---|---|---|---|---|---|---|---|---|---|---|---|
201730054435 | 杨 | 173班 | 2017大学英语新生分级测试试卷(第二场) | 2017-09-11 10:30:26—2017-09-11 11:10:22 | 已阅卷 | 48.0 | 12.0 | 12.0 | 24.0 | ||
201730013371 | 姚 | 172班 | 2017大学英语新生分级测试试卷(第二场) | 2017-09-11 10:14:49—2017-09-11 11:09:20 | 已阅卷 | 60.0 | 26.0 | 10.0 | 24.0 | ||
201730022304 | 王 | 15安全 | 2017大学英语新生分级测试试卷(第二场) | 2017-09-11 10:14:20—2017-09-11 11:11:13 | 已阅卷 | 86.0 | 36.0 | 20.0 | 30.0 |
# -*- coding:utf8 -*-
import xlrd
import os
id = u'85028'
def find(path,id):
for rt, dirs, files in os.walk(path):
for f in files:
if f != ".DS_Store":
path = rt+os.path.sep+f
workbook = xlrd.open_workbook(path)
sheet_names = workbook.sheet_names()
all_value = workbook.sheet_by_index(0)
length = all_value.nrows
for i in xrange(length):
row = all_value.row_values(i)
if id in row[0]:
print row[1].encode('utf8'),row[8]
# print path
# break
if __name__ == "__main__":
path = r"/Users/liruopeng/Downloads/score/english"
while 1:
nID = raw_input("请输入学号中的一部分:")
find(path,nID)
输出结果:
请输入学号中的一部分:85028
张立维 94.0
python 操作 excel还是比价容易的,边查遍写,该脚本在15分钟以内就写完了。在后续的查找中,大幅度提高了我们的效率。不过下次还有这样的事,还是把数据导入到数据库中吧。