Python比較與抽取64位是一款python隨機抽取對比查找軟件,查找誰沒填表、重復(fù)填表的同學(xué),隨機抽取名單,苦于班級事務(wù)繁多,在大學(xué)里有一堆的表要填,同時總是有同學(xué)沒看到消息而不填表,本工具誕生于這樣的條件下。
軟件說明
根本目的為了知道誰沒填表,誰重復(fù)填表了。
不僅如此,很多需要平均分配的任務(wù)還需要隨機抽人(班里分出去了教改班的幾個同學(xué)和原班級)
需要:python(或嵌入式python)
需要的庫:
pandas【核心】(同時因為pandas的原因需要numpy與openpyxl)
os
sys
random
目錄架構(gòu)及解釋說明:
__Python比較與抽取.exe:主程序,當(dāng)然你也可以根據(jù)python的傳參自行調(diào)用,隨便你
compare.py:核心文件,主要的運算均在此處
in.xlsx:輸入要進(jìn)行運算的學(xué)生姓名
例:
ref.xlsx:參考用的表格
格式如下:
out.xlsx:輸出用的表格(均為姓名)
Python源碼
注:python因為個人習(xí)慣的原因?qū)懥艘淮蠖褌鲄ⅰ?br/>在作者看來python就應(yīng)該專注于運算,別的GUI,判斷運行環(huán)境啥的還是交給aardio(粘合劑)吧
[/font][/size]
[size=4][font=微軟雅黑]import os
import random
import sys
import pandas as pd
def Initialize():
ref_t_lack = pd.read_excel(
os.getcwd() + "\\ref.xlsx",
header=None
)
ref_s_lack = set()
for i in range(len(ref_t_lack)):
ref_s_lack.add(ref_t_lack.iloc[i][0])
ref_s_all = ref_s_lack.copy()
for i in ["AAA", "BBB", "CCC", "DDD", "EEE"]: # 此處應(yīng)為教改班同學(xué)的姓名
ref_s_all.add(i)
in_t = pd.read_excel(os.getcwd() + "\\in.xlsx", header=None)
in_s = set()
for i in range(len(in_t)):
in_s.add(in_t.iloc[i][0])
try:
os.remove(os.getcwd() + "\\out.xlsx")
except:
pass
out_t = pd.DataFrame()
return ref_s_lack, ref_t_lack, ref_s_all, in_t, in_s, out_t
def filter(mode: int,
ref_s_lack: set,
ref_t_lack: pd.DataFrame,
ref_s_all: set,
in_t: pd.DataFrame,
in_s: set,
out_t: pd.DataFrame,
num_pick: int):
re = in_t.duplicated()
for i in range(len(re)):
temp = re.iloc[i]
if(temp == True):
print(in_t.iloc[i][0] + "重復(fù)")
if(i == (len(re) - 1)):
print("查重已完成", end="\n\n")
result_lack = ref_s_lack - in_s
result_all = ref_s_all - in_s
if (mode == 0): # 查人除教改班
out_t = pd.concat([out_t, pd.Series(list(result_lack))],
axis=0, ignore_index=True)
print("除教改查人完畢")
elif (mode == 1): # 查人全體
out_t = pd.concat([out_t, pd.Series(list(result_all))],
axis=0, ignore_index=True)
print("全體查人完畢")
if (mode == 20): # 混排除教改班(剩)
temp = list(result_lack)
random.shuffle(temp)
temp = pd.DataFrame(temp)
out_t = pd.concat([out_t, temp], axis=0, ignore_index=True)
print("剩下的同學(xué)混排完畢(除教改)")
elif (mode == 21): # 混排全體(剩)
temp = list(result_all)
random.shuffle(temp)
temp = pd.DataFrame(temp)
out_t = pd.concat([out_t, temp], axis=0, ignore_index=True)
print("剩下的同學(xué)混排完畢(全體)")
if (mode == 30): # 混排輸入(全)
temp = list(in_s)
random.shuffle(temp)
temp = pd.DataFrame(temp)
out_t = pd.concat([out_t, temp], axis=0, ignore_index=True)
print("輸入名單混排完畢")
elif (mode == 31): # 混排全體(除教改)(全)
temp = list(ref_s_lack)
random.shuffle(temp)
temp = pd.DataFrame(temp)
out_t = pd.concat([out_t, temp], axis=0, ignore_index=True)
print("全體混排完畢(除教改)")
elif (mode == 32): # 混排全體(全)(全)
temp = list(ref_s_all)
random.shuffle(temp)
temp = pd.DataFrame(temp)
out_t = pd.concat([out_t, temp], axis=0, ignore_index=True)
print("全體混排完畢(含教改)")
if (mode == 40): # 隨機抽人(除教改)
out_t = pd.concat([out_t, pd.DataFrame(random.sample(list(ref_s_lack), k=num_pick))],
axis=0, ignore_index=True)
print("隨機抽人(除教改)已完成,共抽取{}人".format(num_pick))
elif (mode == 41): # 隨機抽人(全)
out_t = pd.concat([out_t, pd.DataFrame(random.sample(list(ref_s_all), k=num_pick))],
axis=0, ignore_index=True)
print("隨機抽人(全)已完成,共抽取{}人".format(num_pick))
elif (mode == 42): # 隨機抽人(男)(除教改)
temp_list = []
for i in range(len(ref_t_lack)):
if (ref_t_lack.iloc[i][2] == "男"):
temp_list.append(ref_t_lack.iloc[i][0])
out_t = pd.concat([out_t, pd.DataFrame(random.sample(temp_list, k=num_pick))],
axis=0, ignore_index=True)
print("隨機抽人(男)(除教改)已完成,共抽取{}人".format(num_pick))
elif (mode == 43): # 隨機抽人(女)(除教改)
temp_list = []
for i in range(len(ref_t_lack)):
if (ref_t_lack.iloc[i][2] == "女"):
temp_list.append(ref_t_lack.iloc[i][0])
out_t = pd.concat([out_t, pd.DataFrame(random.sample(temp_list, k=num_pick))],
axis=0, ignore_index=True)
print("隨機抽人(女)(除教改)已完成,共抽取{}人".format(num_pick))
out_t.to_excel(os.getcwd() + "\\out.xlsx", header=None, index=False)
mode = int(sys.argv[1])
try:
num_pick = int(sys.argv[2])
except:
num_pick = pd.NA
ref_s_lack, ref_t_lack, ref_s_all, in_t, in_s, out_t = Initialize()
filter(mode, ref_s_lack, ref_t_lack, ref_s_all, in_t, in_s, out_t, num_pick)