一、需求分析
我們首先有一個(gè)成績(jī)表單,但是學(xué)生的成績(jī)是按照學(xué)號(hào)進(jìn)行排序的,現(xiàn)在,我們希望清晰明了的知道每一個(gè)學(xué)生的名次,并且需要將學(xué)生按照成績(jī)的高低重新進(jìn)行排序。
也就是說(shuō),我們將學(xué)生從按照學(xué)號(hào)排序轉(zhuǎn)變?yōu)榘凑粘煽?jī)從高到低進(jìn)行排序。
二、代碼呈現(xiàn)
這個(gè)需求其實(shí)比較簡(jiǎn)單,于是,我們直接呈現(xiàn)代碼,主要問(wèn)題是Excel表格的讀寫(xiě)操作,這個(gè)解決以后就十分簡(jiǎn)單了。
Excel讀:xlrd模塊
Excel寫(xiě):xlwt模塊
代碼以及解釋如下:
import xlwt
import xlrd
# 導(dǎo)入模塊
wb = xlwt.Workbook()
# 創(chuàng)建 excel 表格
xls_0 = xlrd.open_workbook("四年級(jí)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') # 創(chuàng)建一個(gè) 表單
# 設(shè)置空列表進(jìn)行數(shù)據(jù)的存儲(chǔ)
id_list = []
name_list = []
score_list = []
# 讀取表格的數(shù)據(jù)
for o in range(3): # 3 列
for t in range(20): # 20 行
# 獲取學(xué)號(hào)、姓名、成績(jī)等信息
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)
# 獲取數(shù)據(jù)
# 進(jìn)行一定的預(yù)處理,去除不存在的人
# 意思是說(shuō):有些位置是空的,這些位置需要去除掉
for number in range(len(id_list)):
# 由于進(jìn)行的是刪除操作,所以可能會(huì)出現(xiàn)下標(biāo)越界的情況,為了防止這種情況的出現(xiàn),我們進(jìn)行異常處理
try:
if name_list[number] == '' or score_list[number] == '' or score_list[number] == '請(qǐng)假':
# 這個(gè)實(shí)際上是去除空值
id_list.pop(number)
name_list.pop(number)
score_list.pop(number)
except:
continue
# 去除不存在的人
# 進(jìn)行排序的操作
for h in range(len(id_list)):
# len(id_list) 次循環(huán)
for s in range(len(id_list) - 1):
# 這里是進(jìn)行 len(id_list) - 1 次循環(huán)
try:
if score_list[s] >= score_list[s + 1]:
pass
else:
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
# 冒泡排序
# 將數(shù)據(jù)寫(xiě)入文件
position = 0
for h in range(len(id_list)):
# 寫(xiě)入文件
sh.write(position, 0, id_list[h])
sh.write(position, 1, name_list[h])
sh.write(position, 2, score_list[h])
position += 1
# 寫(xiě)入文件中去
# 保存文件
wb.save(f'四年級(jí)1-五至八班-分?jǐn)?shù)排序.xls')
# 保存
在這里,我們使用了冒泡排序,當(dāng)然,如果想要運(yùn)行的更快一些,可以考慮希爾排序,堆排序,快速排序等排序方式,但是要注意,學(xué)號(hào)、姓名、分?jǐn)?shù)一定要同時(shí)進(jìn)行排序,就是說(shuō)這三個(gè)量應(yīng)該捆綁在一起移動(dòng),而移動(dòng)的原則就是分?jǐn)?shù)高低。
三、成果展示
圖片1、
圖片2、
圖片3、
圖片4、
到此這篇關(guān)于Python 處理表格進(jìn)行成績(jī)排序的操作代碼的文章就介紹到這了,更多相關(guān)Python成績(jī)排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python實(shí)現(xiàn)EXCEL表格的排序功能示例
- python文件排序的方法總結(jié)
- Python CategoricalDtype自定義排序?qū)崿F(xiàn)原理解析
- 用python給csv里的數(shù)據(jù)排序的具體代碼