当前位置:   article > 正文

【python辅助excel】(6)_openpyxl筛选指定条件

openpyxl筛选指定条件

(五十一)根据指定列数据降序排列工作表

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“录取表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("录取表.xlsx", data_only=True)
  5. mysheet = mybook['录取表']
  6. # 按行获取录取表(mysheet)的单元格数据(myrange)
  7. myrange=list(mysheet.values)
  8. #根据录取表(mysheet)创建(复制)新录取表(mynewsheet)
  9. mynewsheet = mybook.copy_worksheet(mysheet)
  10. mynewsheet.title = '新录取表'
  11. #删除新录取表(mynewsheet)第3行之后的行(即删除所有考生)
  12. while mynewsheet.max_row>3:
  13. mynewsheet.delete_rows(4)
  14. #从myrange第四行开始先根据总分列对行进行升序排序然后在循环,
  15. for myrow in sorted(myrange[3:],key=lambda x:x[3],reverse=True):
  16. #在新录取表(mynewsheet)中添加经过降序排列后的考生
  17. mynewsheet.append(myrow)
  18. # 保存工作簿,保存为"结果表-录取表.xlsx"文件
  19. mybook.save("结果表-录取表.xlsx")

sorted(myrange[3:],key=lambda x:x[3],reverse=True)

表示对指定范围(myrange[3:])的所有行(从第四行开始)根据第四列(总分列)的数据进行降序排列,reverse=True表示降序,False表示升序,但默认升序

 (五十二)根据字符串长度倒序排列工作表

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“新书订购表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("新书订购表.xlsx", data_only=True)
  5. mysheet = mybook['新书订购表']
  6. # 按行获取新书订购表(mysheet)的单元格数据(第一行除外)
  7. myrows=list(mysheet.values)[1:]
  8. mylist=[]
  9. for myrow in myrows:
  10. mylist+=[myrow[0]]
  11. #根据书名的长度进行倒序排列
  12. mylist.sort(key=len,reverse=True)
  13. #mylist.sort(key=lambda x:len(x),reverse=True)
  14. #在新书订购表(mysheet)中删除所有的行(第一行除外)
  15. while mysheet.max_row>1:
  16. mysheet.delete_rows(2)
  17. #在新书订购表(mysheet)中添加倒序排列的书名
  18. for myrow in mylist:
  19. mysheet.append([myrow])
  20. # 保存工作簿,保存为"结果表-新书订购表.xlsx"文件
  21. mybook.save("结果表-新书订购表.xlsx")

mylist.sort(key=len,reverse=True)

表示根据 mylist 列表成员的字符串长度进行倒序排列

 (五十三)使用集合实现随机排列工作表

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“员工表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("员工表.xlsx",data_only=True)
  5. mysheet = mybook.active
  6. # 按行获取员工表(mysheet)的单元格数据(第一行除外)
  7. myvalues=list(mysheet.values)[1:]
  8. #根据myvalues创建myset集合,此时自动随机排列所有行
  9. myset=set(myvalues)
  10. #删除员工表(mysheet)的行(第一行除外)
  11. while mysheet.max_row>1:
  12. mysheet.delete_rows(2)
  13. #在员工表(mysheet)中添加经过随机排列的行(myset)
  14. for myrow in myset:
  15. mysheet.append([myrow)
  16. # 保存工作簿,保存为"结果表-员工表.xlsx"文件
  17. mybook.save("结果表-员工表.xlsx")

myset=set(myvalues)

表示根据员工表的所有行创建集合在python中,集合是无序的、且不重复元素(成员),因此每次运行此代码时,在myset的成员的排列顺序均不相同

 (五十四)根据间隔行数正序筛选所有行

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“员工表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("员工表.xlsx",data_only=True)
  5. mysheet = mybook.active
  6. # 按行获取员工表(mysheet)的单元格数据(第一行除外)
  7. myrows=list(mysheet.values)[1:]
  8. #删除员工表(mysheet)的行(第一行除外)
  9. while mysheet.max_row>1:
  10. mysheet.delete_rows(2)
  11. #从myrows的第一行开始,根据间隔行数(1行)正序筛选所有行
  12. for myrow in myrows[::2]:
  13. mysheet.append(myrow)
  14. # 保存工作簿,保存为"结果表-员工表.xlsx"文件
  15. mybook.save("结果表-员工表.xlsx")

myrows[::2]

表示从myrows的第一行开始,根据间隔行数(1行)正序筛选所有行。如果 myrows[::1]没有筛选效果。如果 myrows[::3] 表示从myrows的第一行开始,根据间隔行数(2行)正序筛选所有行

 (五十五)根据间隔行数倒序筛选所有行

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“员工表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("员工表.xlsx",data_only=True)
  5. mysheet = mybook.active
  6. # 按行获取员工表(mysheet)的单元格数据(第一行除外)
  7. myrows=list(mysheet.values)[1:]
  8. #删除员工表(mysheet)的行(第一行除外)
  9. while mysheet.max_row>1:
  10. mysheet.delete_rows(2)
  11. #从myrows的第一行开始,根据间隔行数(1行)正序筛选所有行
  12. for myrow in myrows[::-2]:
  13. mysheet.append(myrow)
  14. # 保存工作簿,保存为"结果表-员工表.xlsx"文件
  15. mybook.save("结果表-员工表.xlsx")

myrows[::-2]

表示在myrows中从倒数第一行开始,根据间隔行数(1行)倒序筛选所有行。

如果 myrows[::-1] 仅有倒序排列结果,没有筛选效果

如果 myrows[::-3] 表示在myrows中从倒数第一行开始根据间隔行数(2行)倒序筛选所有行

 (五十六)使用max()筛选最大值所在的行

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“新书表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("新书表.xlsx",data_only=True)
  5. mysheet = mybook.active
  6. # 按行获取员工表(mysheet)的单元格数据(第一行除外)
  7. myrows=list(mysheet.values)[1:]
  8. mydict={}
  9. for myrow in myrows:
  10. #根据每行(myrow)的书名(myrow[0])和售价(myrow[1])创建字典
  11. mydict[myrow[0]]=myrow[1]
  12. #获取在字典(mydict)中售价(mydict.values())最高的图书
  13. mymax=max(zip(mydict.values(),mydict.keys()))
  14. mysheet.append(['【最高售价图书】'+mymax[1],mymax[0]])
  15. # 保存工作簿,保存为"结果表-新书表.xlsx"文件
  16. mybook.save("结果表-新书表.xlsx")

zip(mydict.values(),mydict.keys())

mydict.values() 表示 mydict 的所有键值,mydict.keys() 表示字典的所有键名,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成元组,然后返回由这些元组组成的列表

max() 函数用于获取给定参数的最大值,参数可以是序列

 (五十七)使用关键字筛选符合条件的行

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“员工表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("员工表.xlsx", data_only=True)
  5. mysheet = mybook.active
  6. # 由于每执行一次mysheet.delete_rows(myrow),
  7. # mysheet.max_row会发生变化,因此采用倒循环
  8. # mysheet.max_row表示起始行号,1表示结束行号,-1表示步长
  9. for myrow in range(mysheet.max_row, 1, -1):
  10. if '江北县' not in mysheet[myrow][2].value:
  11. mysheet.delete_rows(myrow)
  12. # 保存工作簿,保存为"结果表-员工表.xlsx"文件
  13. mybook.save("结果表-员工表.xlsx")

 (五十八)使用列表设置条件对行进行筛选

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“销量排行表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("销量排行表.xlsx", data_only=True)
  5. mysheet = mybook.active
  6. # 按行获取销量排行表(mysheet)的单元格数据(第一行除外)
  7. myrows=list(mysheet.values)[1:]
  8. #在销量排行表(mysheet)中删除所有行(第一行除外)
  9. while mysheet.max_row>1:
  10. mysheet.delete_rows(2)
  11. mylist=['清华出版社','北京出版社']
  12. for myrow in myrows:
  13. #根据出版社名字(myrow[3])在mylist中
  14. if myrow[3] in mylist:
  15. mysheet.append(myrow)
  16. # 保存工作簿,保存为"结果表-销量排行表.xlsx"文件
  17. mybook.save("结果表-销量排行表.xlsx")

 (五十九)使用或运算组合条件对行进行筛选

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“销量排行表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("销量排行表.xlsx", data_only=True)
  5. mysheet = mybook.active
  6. # 按行获取销量排行表(mysheet)的单元格数据(第一行除外)
  7. myrows=list(mysheet.values)[1:]
  8. #在销量排行表(mysheet)中删除所有行(第一行除外)
  9. while mysheet.max_row>1:
  10. mysheet.delete_rows(2)
  11. mylist=['清华出版社','北京出版社']
  12. for myrow in myrows:
  13. if myrow[2]>100 or '清华大学出版社' in myrow[3]:
  14. mysheet.append(myrow)
  15. # 保存工作簿,保存为"结果表-销量排行表.xlsx"文件
  16. mybook.save("结果表-销量排行表.xlsx")

 (六十)使用与运算组合条件对行进行筛选

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“销量排行表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("销量排行表.xlsx", data_only=True)
  5. mysheet = mybook.active
  6. # 按行获取销量排行表(mysheet)的单元格数据(第一行除外)
  7. myrows = list(mysheet.values)[1:]
  8. # 在销量排行表(mysheet)中删除所有行(第一行除外)
  9. while mysheet.max_row > 1:
  10. mysheet.delete_rows(2)
  11. for myrow in myrows:
  12. if myrow[2] > 100 and '清华大学出版社' in myrow[3]:
  13. mysheet.append(myrow)
  14. # 保存工作簿,保存为"结果表-销量排行表.xlsx"文件
  15. mybook.save("结果表-销量排行表.xlsx")

 (六十一)使用集合对行进行随机筛选

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“员工表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("员工表.xlsx", data_only=True)
  5. mysheet = mybook.active
  6. # 根据员工表(mysheet)的单元格数据(第一行除外)创建集合(myset)
  7. myset = set(list(mysheet.values)[1:])
  8. # 在员工表(mysheet)中删除所有行(第一行除外)
  9. while mysheet.max_row > 1:
  10. mysheet.delete_rows(2)
  11. #在员工表(mysheet)中随机筛选6行数据
  12. for myrow in range(6):
  13. mysheet.append(myset.pop())
  14. # 保存工作簿,保存为"结果表-员工表.xlsx"文件
  15. mybook.save("结果表-员工表.xlsx")

myset.pop()

表示从 myset 集合中随机随机移除一个成员(移除是随机的)

 (六十二)使用交集方法筛选多个工作表的行

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“运动员表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("运动员表.xlsx", data_only=True)
  5. mysheet1 = mybook['篮球赛']
  6. mysheet2 = mybook['足球赛']
  7. mysheet3 = mybook['乒乓球赛']
  8. # 根据篮球赛工作表(mysheet1)的行(第一行除外)创建集合(myset1)
  9. myset1 = set(list(mysheet1.values)[1:])
  10. # 根据足球赛工作表(mysheet2)的行(第一行除外)创建集合(myset2)
  11. myset2 = set(list(mysheet2.values)[1:])
  12. # 根据篮球赛工作表(mysheet3)的行(第一行除外)创建集合(myset3)
  13. myset3 = set(list(mysheet3.values)[1:])
  14. # 获取三个集合的交集(myset4),即筛选参加三种比赛的运动员
  15. myset4 = myset1.intersection(myset2, myset3)
  16. # 根据交集(myset4)创建参加三种比赛的工作表(mysheet4)
  17. mysheet4 = mybook.copy_worksheet(mysheet1)
  18. mysheet4.title = '三种比赛'
  19. while mysheet4.max_row > 1:
  20. mysheet4.delete_rows(2)
  21. for myrow in myset4:
  22. mysheet4.append(myrow)
  23. # 保存工作簿,保存为"结果表-运动员表.xlsx"文件
  24. mybook.save("结果表-运动员表.xlsx")

myset1.intersection(myset2, myset3)

表示myset1、myset2、myset3三个集合的交集myset4。

可以在 intersection() 方法中添加多个参数,以实现获取多个集合的交集

 (六十三)使用集合推导式对行进行筛选

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“城市排名表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("城市排名表.xlsx", data_only=True)
  5. mysheet = mybook.active
  6. # 按行获取城市排名表(mysheet)的单元格数据(第一行除外)
  7. myrows = list(mysheet.values)[1:]
  8. #使用集合推导式在myrows中筛选包含‘广州’的行
  9. myset={myrow for myrow in myrows if '广州' in myrow[1]}
  10. #在城市排名表(mysheet)中删除所有行(第一行除外)
  11. while mysheet.max_row > 1:
  12. mysheet.delete_rows(2)
  13. #将筛选结果(myset)重新写入城市排名表(mysheet)
  14. for myrow in myset:
  15. mysheet.append(myrow)
  16. # 保存工作簿,保存为"结果表-城市排名表.xlsx"文件
  17. mybook.save("结果表-城市排名表.xlsx")

myset={myrow for myrow in myrows if '广州' in myrow[1]}

表示循环列表(myrows)的每一行(myrow),如果该行( myrow )的城市列( myrow[1] )包含'广州',则将该行添加到新建的集合中

 (六十四)使用集合在多行多列中筛选数据

  1. # 导入openpyxl模块
  2. import openpyxl
  3. # 根据“五百强企业表.xlsx”文件内容,并打开工作簿
  4. mybook = openpyxl.load_workbook("五百强企业表.xlsx", data_only=True)
  5. mysheet = mybook['五百强企业表']
  6. # 按行获取五百强企业表(mysheet)的单元格数据(第一行除外)
  7. myrows = list(mysheet.values)[1:]
  8. #创建空集合(myset)
  9. myset=set()
  10. #循环五百强企业表(mysheet)的行(myrow)
  11. for myrow in myrows:
  12. #循环行(myrow)的公司名称(第一列单元格除外)
  13. for myname in myrow[1:]:
  14. #在集合myset中添加所有的公司名称(自动删除重复的公司)
  15. myset.add(myname)
  16. #在工作簿(mybook)中创建新工作表
  17. mynewsheet=mybook.create_sheet('所有公司表')
  18. #将筛选结果(myset)重新写入城市排名表(mysheet)
  19. for myname in myset:
  20. #在新工作表(mynewsheet)中添加不重复的公司名称(myname)
  21. mynewsheet.append([myname])
  22. # 保存工作簿,保存为"结果表-五百强企业表.xlsx"文件
  23. mybook.save("结果表-五百强企业表.xlsx")

myset.add(myname)

表示在myset集合中添加公司名称(myname),若在五百强公司企业表中存在相同的公司名称,则在myset中只保留一个

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

闽ICP备14008679号