三个班级对学院老师投票选举进行筛选,统计的程序。
程序输入:三个班级的选票文挡。
程序输出:一个过滤掉不满足条件的bad数据集,一个summary文档保存最后选举结果。
三班同学选票的数据格式: 22_23_3_11_19_3_2010210883.txt
一班、二班选票的数据格式:2010210958_1_2_7_16_18_26.txt
#!/usr/bin/env python
# -*- coding: cp936 -*-
#usage: ./1.py dir1 dir2 dir3 ...
import os
import sys
dic = {}
for i in range(1,28):
dic[i] = 0
ticks = 0
quit = []
teachers = {}
teachers['1'] = [str(x) for x in range(1,8)]
teachers['2'] = [str(x) for x in range(8,22)]
teachers['3'] = [str(x) for x in range(22,28)]
def f(dir):
print dir+" done"
if dir=="三班":
files=os.listdir(dir)
ticks=len(files)
for file in files:
tmp=os.path.splitext(file)[0].split('_')
flag=0
for i in[0,1]:
if tmp[i] not in teachers['3']:
flag=1
for i in [2,3,4]:
if tmp[i] in teachers['3']:
flag=1
if flag:
quit.append(file)
continue
for i in tmp[0:tmp.index("3")]:
if i=="0":
continue
dic[int(i)]+=1
else:
files = os.listdir(dir)
ticks = len(files)
for file in files:
tmp = os.path.splitext(file)[0].split('_')
if len(tmp) < 7:
tmp = os.path.splitext(file)[0].split('-')
if len(tmp) < 7:
quit.append(file)
continue
flag = 0
for i in [2,3]:
if tmp[i] not in teachers[tmp[1]]:
flag = 1
for i in [4,5,6]:
if tmp[i] in teachers[tmp[1]]:
flag = 1
if flag:
quit.append(file)
continue
for i in tmp[2:]:
dic[int(i)] += 1
return ticks
for dir in sys.argv[1:]:
ticks += f(dir)
results = open('summary.txt','w')
results.write('Total:{0},Effective:{1}({2:.1f}%),Quit:{3}({4:.1f}%)\n'
.format(ticks,ticks-len(quit),(ticks-len(quit))/float(ticks)*100,len(quit),len(quit)/float(ticks)*100) )
for x in sorted(dic.items(), key=lambda x:x[1],reverse=True):
results.write('{0:2d}:{1:3d}\n'.format(x[0],x[1]))
giveup = open('bad.txt','w')
for i in sorted(quit):
giveup.write(i+'\n')
排序后的文件内容:(为保护老师隐私,前面的数字对应老师的 ID 号,其对应后面为其的投票数)
baddata: