找回密码
 立即注册
搜索
热搜: Excel discuz
查看: 2096|回复: 2

[项目代码] 斑马救援出勤统计代码

[复制链接]

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
发表于 2021-10-2 19:37:50 | 显示全部楼层 |阅读模式
内容来源于更早的一篇帖子 http://zhaoqianzhou.com/forum.php?mod=viewthread&tid=261&extra=page%3D6

  1. from openpyxl import Workbook                         #导入Excel模块
  2. wb = Workbook()                                  #创建一个Excel文件
  3. sheet = wb.active                                  #获取当前sheet名称
  4. sheet.title = "第一个sheet"                          #修改sheet名称
  5. sheet['A1']= "姓名"                                    #在A1 B1单元格输入内容
  6. sheet['B1']= "次数"
  7. import pandas as pd                          #导入pandas库,读csv用的
  8. pd = pd.read_csv('002.csv',encoding='utf-8')      #打开csv文件,读取内容

  9. alllist = '、'.join(pd['参与人员'])              #用顿号拼接人员一列
  10. wordlist = list(alllist.split('、'))             #转成列表格式,以顿号为识别分割符
  11. print(wordlist)                                     #打印列表格式
  12. wordset = set(wordlist)                            #去掉重复内容


  13. newlist = []                                            #创建空列表来存储姓名和次数
  14. for word in wordset:
  15.     freq = wordlist.count(word)                               #计算出现次数
  16.     sheet.append([word,freq])                                   #把内容添加到sheet
  17.     newlist.append([word,freq])                                #把内容加入空列表


  18. newlist = sorted(newlist,key=lambda k:k[1],reverse=True)  #给列表排序
  19. wb.save( "测试3.xlsx")
  20. print(newlist)
复制代码



回复

使用道具 举报

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
 楼主| 发表于 2021-10-2 20:55:25 | 显示全部楼层
最新积分细则代码,目前处于测试阶段
  1. # 导入excel模块,
  2. from openpyxl import Workbook                         #导入Excel模块
  3. wb = Workbook()                                  #创建一个Excel文件
  4. sheet = wb.active                                  #获取当前sheet名称
  5. sheet.title = "斑马救援积分明细"                          #修改sheet名称
  6. sheet['A1']= "姓名"                                    #在A1 B1单元格输入内容
  7. sheet['B1']= "分数"

  8. # 导入pandas库,读取表格
  9. import pandas as pd
  10. #pd = pd.read_csv('002.csv',encoding='utf-8')      #打开csv文件,读取内容
  11. pd = pd.read_excel('002.xlsx')                    #打开excel文件,读取内容
  12. #分别拿出参与人员和出勤类型数据,为创建元组做准备
  13. alllist = ','.join(pd['参与人员'])              #用逗号拼接人员一列,此处生成不是列表,是字符串
  14. alllist = list(alllist.split(','))             #把上一步的字符串转成列表格式,以逗号为识别分割符
  15. classlist = '、'.join(pd['出勤类型'])        #拼接出勤类型成字符串
  16. classlist = list(classlist.split('、'))    #把拼接出来的字符串转成列表

  17. dalist = []                 #创建一个空列表存放所有的姓名(重复姓名都在这里边)
  18. b = []                      #创建空列表存放去重后的姓名
  19. # 创建元组,让出勤类型和出勤人员一一对应
  20. zidian = zip(classlist,alllist)
  21. # 循环元组内容,判断哪种类型应该积分多少
  22. for i in list(zidian):
  23.     if i[0] == '第一类1分':
  24.         dalist.append(i[1].split('、'))
  25.     elif i[0] == '第二类2分':
  26.         dalist.append(i[1].split('、')*2)
  27.     elif i[0] == '第三类3分':
  28.         dalist.append(i[1].split('、')*3)

  29. #这一步,把大列表里面嵌套的小列表,全部清空,只把姓名拿出来放到一个列表b里
  30. for a in dalist:
  31.     b.extend(a)

  32. name = set(b)     #人员去重,每个名字只留下一个

  33. newlist = []                                            #创建空列表来存储姓名和次数
  34. for word in name:
  35.     freq = b.count(word)                               #计算出现次数
  36.     sheet.append([word,freq])                                   #把内容添加到sheet
  37.     newlist.append([word,freq])                                #把内容加入空列表


  38. newlist = sorted(newlist,key=lambda k:k[1],reverse=True)  #给列表排序
  39. wb.save( "积分明细.xlsx")
  40. print(newlist)
复制代码




回复

使用道具 举报

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
 楼主| 发表于 2021-10-5 14:06:15 | 显示全部楼层
相比于楼上,增加了excel行数的读取,和处理数据的计算,通过对比两个数字,来判断是否全部数据都处理完。
  1. # 导入openpy模块,操作最后一步导出excel
  2. from openpyxl import Workbook                         #导入Excel模块
  3. wb = Workbook()                                  #创建一个Excel文件
  4. sheet = wb.active                                  #获取当前sheet名称
  5. sheet.title = "斑马救援积分明细"                          #修改sheet名称
  6. sheet['A1']= "姓名"                                    #在A1 B1单元格输入内容
  7. sheet['B1']= "分数"

  8. # 导入pandas库,读取表格
  9. import pandas as pd
  10. #pd = pd.read_csv('002.csv',encoding='utf-8')      #打开csv文件,读取内容
  11. pd = pd.read_excel('全部记录.xlsx')                    #打开excel文件,读取内容
  12. linesnum = pd.index.stop                 #excel数据行数
  13. #分别拿出参与人员和出勤类型数据,为创建元组做准备
  14. alllist = ','.join(pd['参与人员'])              #用逗号拼接人员一列,此处生成不是列表,是字符串
  15. alllist = list(alllist.split(','))             #把上一步的字符串转成列表格式,以逗号为识别分割符
  16. classlist = '、'.join(pd['积分类型'])        #拼接出勤类型成字符串
  17. classlist = list(classlist.split('、'))    #把拼接出来的字符串转成列表
  18. x = 0                             #储存处理数据的数目
  19. dalist = []                 #创建一个空列表存放所有的姓名(重复姓名都在这里边)
  20. b = []                      #创建空列表存放去重后的姓名
  21. # 创建元组,让出勤类型和出勤人员一一对应
  22. zidian = zip(classlist,alllist)
  23. # 循环元组内容,判断哪种类型应该积分多少
  24. for i in list(zidian):
  25.     if i[0] == '1分':
  26.         dalist.append(i[1].split('、'))
  27.         x = x + 1
  28.     elif i[0] == '2分':
  29.         dalist.append(i[1].split('、')*2)
  30.         x = x + 1
  31.     elif i[0] == '3分':
  32.         dalist.append(i[1].split('、')*3)
  33.         x = x + 1
  34.     else:
  35.         print(f'积分类型为{i[0]}的数据有问题')
  36. #这一步,把大列表里面嵌套的小列表,全部清空,只把姓名拿出来放到一个列表b里
  37. for a in dalist:
  38.     b.extend(a)

  39. name = set(b)     #人员去重,每个名字只留下一个

  40. newlist = []                                            #创建空列表来存储姓名和次数
  41. for word in name:
  42.     freq = b.count(word)                               #计算出现次数
  43.     sheet.append([word,freq])                                   #把内容添加到sheet
  44.     newlist.append([word,freq])                                #把内容加入空列表


  45. newlist = sorted(newlist,key=lambda k:k[1],reverse=True)  #给列表排序

  46. #用excel行数对比处理的数据,如果一样就说明全部数据已经处理完,如果不同,就说明有的数据没有处理
  47. if linesnum == x:
  48.     print(f'数据处理完毕,共{linesnum}条记录')
  49.     print(newlist)
  50.     wb.save("积分明细.xlsx")
  51. else:
  52.     print(f'共有数据{linesnum},已经处理{x}条,请排查数据')
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|五花八门论坛 ( 豫ICP备15031300号-3 )

GMT+8, 2024-12-22 00:38 , Processed in 0.065882 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表