日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python制作奖状,从excel表格中导出数据,取前20名,做成png奖状,再放入ppt中

發布時間:2023/12/31 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python制作奖状,从excel表格中导出数据,取前20名,做成png奖状,再放入ppt中 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,從excel表格中提取所有學生姓名,班級,成績數據
二,按要求篩選學生名單,優秀學生選成績前20名,如有并列,也制作獎狀;進步獎學生取進步率前20名,如有并列,也制作獎狀,進步率為:(本周成績-上周成績)/上周成績
三,生成所有做獎狀的學生名單,放入excel表格
四,為符合條件的每位學生制作png形式的獎狀
五,將每個班級的獎狀放到同一個ppt中

獎狀圖片模板以及excel的格式如下圖所示:


請大家多多指教,代碼如下:

// A code block // An highlighted block ##### 本版本是ppt版 ##### import datetime, time, pptx import pandas as pd # 數據處理 from docx.shared import RGBColor from PIL import Image, ImageDraw, ImageFont from pptx.util import Inches# 用戶選擇獎狀類型 def tesSpecies():while True:info = input('請選擇您要打印的獎狀種類【1(優秀獎狀);2(進步獎狀)】請輸入‘1’或‘2’:')if info == '1':info = '優秀獎狀'breakelif info== '2':info = '進步獎狀'breakelse:print('您輸入的格式不正確,請重新輸入')return info# 用戶選擇成績周期week,第幾周的成績數據 def week():while True:week = input('請輸入成績周期(例如:第十一周):')if week is None:print('您未輸入內容,請重新輸入')else:breakreturn week# 用戶輸入存儲成績數據的excel文件 def filename():while True:filename = input('請輸入存放成績數據的文件名稱(例如:x.xls)')if filename.endswith('.xls') is False:print('輸入的文件類型必須是excel表格,請重新輸入')else:breakprint('請稍等,獎狀制作中......')return filename# 優秀獎狀-從文件中提取所有學生信息,并按總成績排序 def goodFileName(file, sheetName, columnName, sortColumn):products = pd.read_excel(file, sheet_name=sheetName, usecols=columnName) # 數據類型為frame.DataFrame# 按‘綜合成績’降序排列,取前20名,tail(n)為取尾n行students = products.sort_values(by=sortColumn, ascending=False)return students# 進步獎狀-從文件中提取所有學生信息,并按進步率排序 def progressFileName(file, sheetName, columnName):products = pd.read_excel(file, sheet_name=sheetName, usecols=columnName)# 增加’進步率‘列,按'進步率‘排列,tail(n)為取尾n行products['進步率'] = products.apply(lambda x: (x['綜合成績'] - x['上周課綜合成績']) / x['上周課綜合成績'], axis=1)students = products.sort_values(by="進步率", ascending=False)return students# student類,屬性:姓名,班級,分數 class student(object):def __init__(self, name, major, grade, score):self.name = name # student的姓名屬性self.major = major # student的專業屬性self.grade = grade # student的班級屬性self.score = score # student的分數屬性# 檢查是否有排名并列的學生,獲得最終獲獎學生名列表 def isRanking(namelt, species):# 將前20名同學名單放入優秀學生列表goodStu = namelt[0:20]# 優秀獎狀人名單if species == '優秀獎狀':# 檢查是否有跟第20名分數相同的同學,如果有也加入到優秀學生列表for i in range(20, len(namelt)):if scorelt[i] == scorelt[19]:goodStu.append(namelt[i])# 進步獎狀人名單else:for i in range(20, len(namelt)):if proRatelt[i] == proRatelt[19]:goodStu.append(namelt[i])return goodStu# 獲得獎狀的學生名單 def nameList(students, counter):goodStudentDetail = students.head(counter)goodStudent = goodStudentDetail['學生姓名']# 建立學生名單列表nameList = []for name in goodStudent:nameList.append(name)return nameList# 獲優秀獎學生根據班級信息排序后的詳情 def goodClassInfo(students, counter):classInfoList1 = (students.iloc[:, [0, 1, 2, 3]]).head(counter) # 根據排名取前counter名學生信息classInfoList = classInfoList1.sort_values(by=['專業', '班級'], ascending=[False, True]) # 根據班級信息排序return classInfoList# 獲進步獎學生根據班級信息排序后的詳情 def progressClassInfos(students,counter):classInfoList1 = (students.iloc[:, [0, 1, 2, 5]]).head(counter)classInfoList = classInfoList1.sort_values(by=['專業', '班級'], ascending=[False, True])return classInfoList# 打印開始時間 print(time.strftime('%I:%M:%S')) # 用戶選擇獎狀類型 species = tesSpecies() # 用戶輸入成績是第幾周的 week = week() # 用戶輸入數據來源的文件名 filename = filename()# 優秀獎狀 if species == '優秀獎狀':# 從excel文檔中提取優秀學生的數據students = goodFileName(filename, f'{week}-成績詳情', 'A,E,F,K', '綜合成績') # 進步獎狀 else:# 從excel文檔中提取優秀學生的數據students = progressFileName(filename, f'{week}-成績詳情','A,E,F,K,M')namelt, majorlt, gradelt, scorelt ,proRatelt = [], [], [], [], [] # 將每位學生的姓名,專業,班級,分數,進步率分別放入對應的列表 for name in students.iloc[:, 0]:namelt.append(name) for major in students.iloc[:, 1]:majorlt.append(major) for grade in students.iloc[:, 2]:gradelt.append(grade) for score in students.iloc[:, 3]:scorelt.append(score) if species != '優秀獎狀':for proRate in students.iloc[:,5]: # 進步率proRatelt.append(proRate) # 獲得獲獎學生名單列表 goodStu = isRanking(namelt, species) # 統計優秀學生總人數 counter = len(goodStu)# 調取獲獎學生的名字名單 nameList = nameList(students, counter) # 調取優秀學生的詳細信息 if species == '優秀獎狀':classInfoList = goodClassInfo(students, counter) # 將優秀學生的詳細信息放入excelclassInfoList.to_excel(f"{species}學生-詳細名單-{week}.xlsx")else: # 進步classInfoList = progressClassInfos(students, counter)classInfoList.to_excel(f"{species}學生-詳細名單-{week}.xlsx")# 當前日期 a = datetime.datetime.now() today = f'{a.year}年{a.month}月{a.day}日' # 逐一打印獎狀 name = '' gradeSet = set() # 設置一個空的班級名集合,用于收集班級的信息同時去重 pngFileName = [] # 將所有制作好的獎狀名稱放入這個文件名列表 for num in range(len(nameList)):name = nameList[num] # 將name變量附上名字的值,用于類的實例化,并且不會對namelt列表中的值造成影響name = student(namelt[num], majorlt[num], gradelt[num], scorelt[num])# line = name.strip('\n') # 去掉列表中每一個元素的換行符if species == '優秀獎狀':picture = '1優秀獎狀模板.png'else:picture = '1進步獎狀模板.png'old_img = Image.open(picture)draw = ImageDraw.Draw(old_img)# 設置圖片文字,字體類型,'simkai.ttf'為字體文件路徑,以及字體大小,顏色newFont1 = ImageFont.truetype('simkai.ttf', 38) # 名字的字體的文件名/路徑 字體大小newFont2 = ImageFont.truetype('simhei.ttf', 33) # 日期的字體(字體文件路徑) 大小newColor = RGBColor(0, 0, 0) # 通過RGB設置學生名字的顏色# 分別設置文字的字體及位置draw.text((196, 190), nameList[num], font=newFont1, fill=newColor)draw.text((660, 570), today, font=newFont2, fill=newColor)# 獎狀的名字.pngsave_address = str(name.major) + '-' + str(name.grade) + '-' + nameList[num] + f'-{species}-' + time.strftime('%Y%m%d') # + '.png'old_img.save(save_address + '.png', 'png') # 可以直接將png卸載名字上,此處是方便將文件改成jpg格式的命名,所以分開寫# 將獎狀從png格式改成jpg格式(因為RGB不能直接寫成jpg)pngName = save_address + '.png'# 也可以制作jpg的圖片,代碼如下:# jpgName = save_address + '.jpg'# 將RGB轉換# im = Image.open(pngName)# rgbIm = im.convert('RGB')# rgbIm.save(jpgName)# 將班級信息存入集合中,方便去重gradeSet.add(f'{name.major}-{name.grade}')# 將獎狀名稱放入列表pngFileName.append(pngName)# 將班級信息轉為列表,方便使用下標操作 gradeList = [] for grade in gradeSet:gradeList.append(grade) # 將同一班級的獎狀放到同一個列表中,再創建班級的ppt文件 for num in range(len(gradeList)):gradeName = gradeList[num] # 提取班級名稱grade = [] # 為這個班級建空列表# 對獎狀分班for file in pngFileName:if gradeList[num] in file:grade.append(file)gradeLen = len(grade)print(f'{gradeName}班,共{gradeLen}名學生獲得{species}')# 制作這個班級的PPT文件ppt_file = pptx.Presentation()for fn in grade:slide = ppt_file.slides.add_slide(ppt_file.slide_layouts[1])slide.shapes.add_picture(fn, Inches(0), Inches(0), Inches(10), Inches(7.5))ppt_file.save(f'{gradeName}-{week}-{species}-{today}.ppt')# 統計獎狀數,提示打印結束 print(f'共打印獎狀{counter}個\n{species}榮譽證書制作完成!') # 打印結束時間 print(time.strftime('%I:%M:%S'))

總結

以上是生活随笔為你收集整理的python制作奖状,从excel表格中导出数据,取前20名,做成png奖状,再放入ppt中的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。