python读写操作excel数据

'''
今天教务老师给我发来了一堆excel表 需要我处理一些数据
都是一些基础的数据,这是今年来同济参加夏令营的申请材料
在我按部就班的处理了几个之后,觉得这样处理实在是效率太低下了,
于是我就写了下面这个程序,用python代码来批量化处理excel数据

首先 ,本科学校级别不同,985 211 会有不同的加分,所有我们要筛选匹配出
所有人的本科学校,进行匹配

'''
###首先建立985学校名单列表
school_985 = ['清华大学','北京大学','厦门大学','天津大学',
'中国科学技术大学','南京大学','浙江大学',
'复旦大学','哈尔滨工业大学','南开大学','西安交通大学',
'西北工业大学','北京师范大学','同济大学','中南大学',
'中国农业大学','国防科技大学','西北农林科技大学','华东师范大学','中央民族大学',
'华南理工大学','北京航空航天大学','兰州大学','东北大学',
'重庆大学','电子科技大学','大连理工大学','四川大学','中山大学',
'山东大学','湖南大学','中国人民大学','北京理工大学','吉林大学',
'华中科技大学','东南大学','武汉大学','上海交通大学','中国海洋大学',
]
####建立211学校名单列表
school_211 = ['清华大学', '北京大学', '中国科学技术大学', '复旦大学',
'中国人民大学', '上海交通大学', '南京大学', '同济大学',
'浙江大学', '上海财经大学', '南开大学', '北京航空航天大学',
'中央财经大学', '北京师范大学', '武汉大学', '对外经济贸易大学',
'西安交通大学', '天津大学', '华中科技大学', '北京理工大学',
'东南大学', '北京外国语大学', '中山大学', '中国政法大学',
'华东师范大学', '哈尔滨工业大学 ', '北京邮电大学', '厦门大学',
'上海外国语大学', '西北工业大学', '西南财经大学', '中南大学',
'大连理工大学', '中国传媒大学', '四川大学', '电子科技大学',
'中南财经政法大学', '华南理工大学', '吉林大学', '南京航空航天大学',
'湖南大学', '重庆大学', '北京科技大学', '北京交通大学', '山东大学',
'华东理工大学', '西安电子科技大学', '天津医科大学 ', '南京理工大学',
'中国农业大学', '华中师范大学', '中国海洋大学', '哈尔滨工程大学',
'中央民族大学', '华北电力大学', '北京中医药大学', '暨南大学 ',
'苏州大学', '武汉理工大学', '东北大学', '兰州大学', '中国药科大学',
'东华大学', '河海大学', '北京林业大学', '河北工业大学', '北京工业大学',
'江南大学', '北京化工大学', '西南交通大学', '上海大学', '南京师范大学 ',
'中国地质大学', '中国地质大学', '西北大学', '东北师范大学', '长安大学',
'中国矿业大学', '华中农业大学', '合肥工业大学', '广西大学', '中国石油大学',
'陕西师范大学', '南京农业大学', '湖南师范大学', '福州大学', '大连海事大学',
'西北农林科技大学', '西南大学', '中国矿业大学', '云南大学', '太原理工大学',
'华南师范大学', '北京体育大学', '中国石油大学', '安徽大学', '东北林业大学',
'东北农业大学', '辽宁大学', '南昌大学', '延边大学', '内蒙古大学', '四川农业大学',
'海南大学', '贵州大学', '郑州大学', '新疆大学', '宁夏大学', '石河子大学', '青海大学',
'国防科技大学', '中央音乐学院', '第二军医大学', '第四军医大学', '华北电力大学', '西藏大学']
###建立学生加分的列表
grades = []
#####导入读excel 的模块
import xlrd
##由文件路径读取文件
work_book = xlrd.open_workbook(r'C:\Users\DELL\Desktop\微电子71.xls')
##看看这个文件下面有几个表 获取该文件下的三个表的名字
print(work_book.sheet_names())
###我们需要读的是第二个也就是序号为1 的表
sheet = work_book.sheet_by_index(1)
##得到第二列的值 的列表
list1 = sheet.col(1)
##去掉第一个 ,也就是第一行第一列的元素
list1 = list1[1:]

##下面就是一些对读到的这个列表中的元素 进行一些类型的转换 字符串的切割
##最终得到自己想要的形式
list2 = []
for i in list1:
lis = []
j = str(i)
lis = j.split(':')
list2.append(lis[1])
print('=========================================================')
list2 = list2[:-1] ###把最后一行空的元素去掉

list3 = []
for i in list2:
j = i.strip("'")
list3.append(j)

for school in list3:
if school in school_985:
num = 10
elif school in school_211:
num = 8
else:
num = 6
grades.append(num)

print('学校加分是:::::::::::::::::::::::::::::::::::::::::::')
print(grades)

###好,现在我们根据这些学生的本科学校的级别的不同,得到了一个列表,列表的值按照顺序
##对应每个学生应该加的分数 985学校加10分,211加8分 普通学校加6分
##现在我们要做的是,将这个列表中的数据直接写入到excel 中去,
##我们不可能一个一个手动的去输入,那样的话效率太慢了,
###作为一个程序员,能用程序完成的事情,坚决不要手动


##导入写excel的模块
import xlwt
work = xlwt.Workbook()
sheet = work.add_sheet('sheet2')
font = xlwt.Font()
font.name = "Calibri" # 字体名称
font.bold = True # 加粗
font.italic = False # 不要斜体
font.underline = False # 不要下划线
style = xlwt.XFStyle()
style.font = font
print(len(grades))

for i in range(len(grades)):
sheet.write(i+1, 4, grades[i], style)
#### write 第一个参数表示行数,第二个参数表示列数,第三个参数表示写入的内容,值,第四个参数表示内容的格式
work.save
(r'C:\Users\DELL\Desktop\微电子72.xls')
##这是 excel 保存的路径位置


"""
现在我们已经基本实现了这个功能,读写excel 表中的数据,进行相应的运算,然后将得到的结果写入到excel 表格中
但是,还存在一个问题
我们还不能讲得到的结果写入原来的excel 表中去,只能写入一个新的excel表中去,
我们当前的写入默认模式是清空写,如果最后面save 的地址路径是一样的,重合的,会将原来的文件清空,写入新的数据
这个时候,我们将保存的地址设置成不一样的
数据就存在于连个表中,一个新表,一个旧表,我们需要将两个表的数据合二为一
这个时候有两种方式:
1,直接将旧表的所有值读一遍一起写入新表中
2,将新表中的值手动复制粘贴到旧表中
这两种方式都可以,具体看个人的选择

思路3:
openpyxl 这个模块好像可以实现同时读写 追加写 可以实现这个功能,有时间再研究研究这个模块

"""



posted @ 2019-06-13 21:48  同济小孙  阅读(246)  评论(0编辑  收藏  举报