Python 操作 Excel
Python 处理excel
老师需要找出哪些同学在网上填了返校申请,因为有几百个人,所以比较难以肉眼看出来
这里我们假设填了信息的人可以导出名字,和整个年级的名单
这样我们就有两个表了,代码如下
import xlrd
# 总的人名
name_set = []
# 填报的人
name_data = []
# 没填报的人
other = []
set_excel = xlrd.open_workbook('C:\\Users\\Luokey\\Desktop\\set.xlsx')
set_sheet = set_excel.sheets()[0]
print(set_sheet.name)
print("=============")
# 这里实际上是从第二行开始,到第一列的最后一个元素
for i in range(1,len(set_sheet.col_slice(0, start_rowx=0, end_rowx=None))):
name = set_sheet.cell_value(i, 0)
name_set.append(name)
print(name_set)
print(len(name_set))
data_excel = xlrd.open_workbook('C:\\Users\\Luokey\\Desktop\\data.xlsx')
data_sheet = data_excel.sheets()[0]
print("=============")
# 这里实际上是从第二行开始,到第一列的最后一个元素
for i in range(1,len(data_sheet.col_slice(0, start_rowx=0, end_rowx=None))):
name = data_sheet.cell_value(i, 0)
name_data.append(name)
print("======没提交的名单=======")
for name in name_set:
if name not in name_data:
print(name)
other.append(name)
print("一共:"+str(len(other))+"位同学")
print("========================")
代码非常简单,分成三部分
- 初始化list
- 读表格中的名字,并存入list
- 对比list中的名字,没有的就输出
# 可以获得某一列的长度
len(表.col_slice(列的索引, start_rowx=0, end_rowx=None))
遇到的问题
xlrd.biffh.XLRDError: Excel xlsx file; not supported
在xlrd-2.0.1中已经不支持xlsx这种格式了,因此只能重新安装老版本的xlrd
在cmd中输入命令
pip uninstall xlrd
pip install xlrd==1.2.0
下载指定版本的xlrd即可
写入excel
除此之外遇到一个需求是,根据excel的内容去修改excel,而xlrd只能读excel,而不能写,因此需要另外的模块
import xlwt
代码如下:
from bs4 import BeautifulSoup
import xlrd
import xlwt
from xlutils.copy import copy
with open('C:\\Users\\Luokey\\Desktop\\1.htm',encoding="utf-8") as file_obj:
html = file_obj.read()
soup = BeautifulSoup(html,'lxml')
names = []
items = soup.select('.manage-bar.completed > .manage-body > .left-block > .apply-detail-outside > ul:nth-child(3) > li:nth-child(1)')
for item in items:
name = item.text[6:]
names.append(name)
info=[]
old = xlrd.open_workbook('C:\\Users\\Luokey\\Desktop\\18.xlsx')
old_sheet = old.sheets()[0]
new_excel = copy(old)
sheet1 = new_excel.get_sheet(0)
print("=============")
for i in range(1,len(old_sheet.col_slice(1, start_rowx=0, end_rowx=None))):
na = old_sheet.cell_value(i, 1)
if na in names:
info.append(i)
for i in range(1,len(old_sheet.col_slice(1, start_rowx=0, end_rowx=None))):
sheet1.write(i,2,1)
for i in info:
sheet1.write(i,2,0)
new_excel.save('18.xls')
因为那个网页一次性可以显示上千条数据,所以就不写登录爬虫,直接把整个网页保存下来读取内容
- 先用xlrd读取表
- 用copy复制一份表
- 操作新表
- 保存新表