背景
圖像領(lǐng)域內(nèi)的一個國內(nèi)會議快要召開了,要發(fā)各種邀請郵件,之后要錄入、統(tǒng)計(jì)郵件回復(fù)(參會還是不參會等)。如此重要的任務(wù),老師就托付給我了。ps: 統(tǒng)計(jì)回復(fù)郵件的時候,能知道誰參會或誰不參會。
而我主要的任務(wù),除了錄入郵件回復(fù),就是統(tǒng)計(jì)理事和普通會員的參會情況了(參會的、不參會的、沒回復(fù)的)。錄入郵件回復(fù)信息沒辦法只能人工操作,但如果統(tǒng)計(jì)也要人工的話,那工作量就太大了(比如在上百人的列表中搜索另外上百人在不在此列表中!!),于是就想到了用python來幫忙,花兩天時間不斷修改,寫了6個版本。。。
摘要
version_1 基本實(shí)現(xiàn)了excel讀取、統(tǒng)計(jì)、顯示功能,但問題也有不少,像顯示出來后還要自已復(fù)制、粘貼到excel表,而且set中還有nan這樣的bug。
version_2 相比較version_1而言,此版本用set代替list,可以自動去重。
version_3 解決了set中出現(xiàn)nan的bug,而且還加入的excel寫入的功能,但一次只能寫入一張表,所以要運(yùn)行兩次才能寫入兩張表(sheet)。
version_4 的改進(jìn)在于將version_3中寫入兩張表格的操作,集成在一個程序里,只需要運(yùn)行一次便可寫入兩張表,但也總是會寫入兩張表,萬一你只想寫入一張表呢??
version_5 相對之前版本的最大改進(jìn)在于將程序模塊化,更具可讀性了; 對修復(fù)set中出現(xiàn)nan的方法也進(jìn)行了改進(jìn)和簡化; 而且可以自由控制寫入多少張表了。
version_final 相比較version_5,修復(fù)了一個bug,之前需要先驗(yàn)知識,現(xiàn)在更通用一點(diǎn)(prep函數(shù)取代了set2list函數(shù))。
version_1
基本實(shí)現(xiàn)了excel讀取、統(tǒng)計(jì)、顯示功能,但問題也有不少,像顯示出來后還要自已復(fù)制、粘貼到excel表,而且set中還有nan這樣的值。
#version_1import osimport numpy as npimport pandas as pdos.chdir('C://Users//dell//Desktop//0711任務(wù)')print(os.getcwd())data = pd.read_excel('for_python.xlsx','Sheet2')return_set = set(data['回執(zhí)名單'])demand_set = set(data['理事名單'])answer_list = []unanswer_list = []for each in demand_set: if each in return_set: answer_list.append(each) else: unanswer_list.append(each)notattend_set = set(data['回執(zhí)名單'][-15:])nt = []for each in notattend_set: if each in answer_list: nt.append(each)def disp(ll, cap, num = True): print(cap) if num: for i, each in enumerate(ll): print(i+1,each) else: for each in enumerate(ll): print(each)disp(answer_list,'/n理事回執(zhí)名單')disp(unanswer_list,'/n理事未回執(zhí)名單')disp(nt,'/n理事回執(zhí)說不參加名單')version_2
相比較上一個版本,此版本用set代替list,可以自動去重。
#version_2import osimport numpy as npimport pandas as pdos.chdir('C://Users//dell//Desktop//0711任務(wù)')print(os.getcwd())data = pd.read_excel('for_python.xlsx','Sheet2')return_set = set(data['回執(zhí)名單'])demand_set = set(data['理事名單'])answer_set = set([]) #理事回執(zhí)名單unanswer_set = set([]) #理事未回執(zhí)名單for each in demand_set: if each in return_set: answer_set.add(each) else: unanswer_set.add(each)notattend_set = set(data['回執(zhí)名單'][-17:])nt = set([]) #理事回執(zhí)說不參加名單for each in notattend_set: if each in answer_set: nt.add(each)ans_att_set = answer_set - nt #理事回執(zhí)參加名單def disp(ss, cap, num = False): print(cap) if num: for i, each in enumerate(ss): print(i+1,each) else: for each in ss: print(each)#disp(answer_set,'/n理事回執(zhí)名單')disp(ans_att_set,'/n理事回執(zhí)說參加名單')disp(nt,'/n理事回執(zhí)說不參加名單')disp(unanswer_set,'/n理事未回執(zhí)名單')print(len(ans_att_set),len(nt),len(unanswer_set))
新聞熱點(diǎn)
疑難解答
圖片精選