Python 處理表格進行成績排序的操作代碼
我們首先有一個成績表單,但是學生的成績是按照學號進行排序的,現在,我們希望清晰明了的知道每一個學生的名次,并且需要將學生按照成績的高低重新進行排序。
也就是說,我們將學生從按照學號排序轉變為按照成績從高到低進行排序。
二、代碼呈現這個需求其實比較簡單,于是,我們直接呈現代碼,主要問題是Excel表格的讀寫操作,這個解決以后就十分簡單了。
Excel讀:xlrd模塊Excel寫:xlwt模塊
代碼以及解釋如下:
import xlwtimport xlrd# 導入模塊wb = xlwt.Workbook() # 創建 excel 表格xls_0 = xlrd.open_workbook('四年級1.xls')# 讀取表格文件for i in range(4, 8, 1): # 讀取不同的表單 new_sheet = xls_0.sheet_by_index(i) sh = wb.add_sheet(f’{new_sheet.name}.xls’) # 創建一個 表單 # 設置空列表進行數據的存儲 id_list = [] name_list = [] score_list = [] # 讀取表格的數據 for o in range(3): # 3 列for t in range(20): # 20 行 # 獲取學號、姓名、成績等信息 id_list.append(new_sheet.cell(t + 3, 3 * o).value) name_list.append(new_sheet.cell(t + 3, 3 * o + 1).value) score_list.append(new_sheet.cell(t + 3, 3 * o + 2).value) # 獲取數據 # 進行一定的預處理,去除不存在的人 # 意思是說:有些位置是空的,這些位置需要去除掉 for number in range(len(id_list)):# 由于進行的是刪除操作,所以可能會出現下標越界的情況,為了防止這種情況的出現,我們進行異常處理try: if name_list[number] == ’’ or score_list[number] == ’’ or score_list[number] == ’請假’:# 這個實際上是去除空值id_list.pop(number)name_list.pop(number)score_list.pop(number)except: continue # 去除不存在的人 # 進行排序的操作 for h in range(len(id_list)):# len(id_list) 次循環for s in range(len(id_list) - 1): # 這里是進行 len(id_list) - 1 次循環 try:if score_list[s] >= score_list[s + 1]: passelse: score_list[s], score_list[s + 1] = score_list[s + 1], score_list[s] name_list[s], name_list[s + 1] = name_list[s + 1], name_list[s] id_list[s], id_list[s + 1] = id_list[s + 1], id_list[s] except:continue # 冒泡排序 # 將數據寫入文件 position = 0for h in range(len(id_list)):# 寫入文件sh.write(position, 0, id_list[h])sh.write(position, 1, name_list[h])sh.write(position, 2, score_list[h])position += 1 # 寫入文件中去# 保存文件wb.save(f’四年級1-五至八班-分數排序.xls’) # 保存
在這里,我們使用了冒泡排序,當然,如果想要運行的更快一些,可以考慮希爾排序,堆排序,快速排序等排序方式,但是要注意,學號、姓名、分數一定要同時進行排序,就是說這三個量應該捆綁在一起移動,而移動的原則就是分數高低。
三、成果展示圖片1、
圖片2、
圖片3、
圖片4、
到此這篇關于Python 處理表格進行成績排序的操作代碼的文章就介紹到這了,更多相關Python成績排序內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: