python 地税局自动分组随机选案软件

oplist.py

class Operatinglist():
    def __init__(self,new_lists,old_lists):
        # 已经分组list集合
        self.new_lists = new_lists
        # 未分组list
        self.old_lists = old_lists

    def has_new_list(self):
        """判断是否有未分组的list"""
        return self.old_list_size() != 0

    def select_list_old_list(self,list):
        """list是否在old_list集合,如果有返回index,否则返回-1"""
        if list is None:
            return
        if list in self.old_lists :
            return self.old_lists.index(list)
        else:
            return -1

    def del_new_add_old_list(self, index):
        """将一个list分组,并从old删除返回并添加到new"""
        if index is None:
            return
        else:
            list = self.old_lists.pop(index)
            self.new_lists.append(list)
            return list

    def add_old_lists(self, lists):
        """将一个新的list添加到未分组的list集合"""
        for x in range(len(lists)):
            self.old_lists.append(list[x])

    def del_new_lists(self):
        """清空列表"""
        self.new_lists.clear()

    def new_list_size(self):
        """获取未分组的list的集合大小"""
        return len(self.new_lists)

    def old_list_size(self):
        """获取已经分组的list的集合大小"""
        return len(self.old_lists)

opexcel.py

import xlrd
import xlwt
from xlutils.copy import copy
class Operatingexcel():
    def get_excel_dic(self,filename,sheetname):
        # filename 文件名
        # sheetname 表单名
        # 返回字典格式
        dic = {}
        data = xlrd.open_workbook(filename, 'r', encoding_override='utf-8')
        table = data.sheet_by_name(sheetname)
        for i in range(1, table.nrows):
            for y in range(len(table.row_values(0))):
                if table.row_values(i)[y] != "":
                    dic.setdefault(table.row_values(0)[y], []).append(table.row_values(i)[y])
        return dic

    def get_excel_list(self,filename,sheetname):
        # filename 文件名
        # sheetname 表单名
        # 返回列表格式
        list = []
        data = xlrd.open_workbook(filename, 'r', encoding_override='utf-8')
        table = data.sheet_by_name(sheetname)
        for y in range(table.nrows):
            for x in range(len(table.row_values(0))):
                if table.row_values(y)[x] != "":
                    list.append(table.row_values(y)[x])
        return list

    def set_excel_dic(self,dic,filename,sheet_index,start_r):
        # filename 文件名
        # sheet_index第几个工作表格
        # start_r那一列

        x = start_r
        for k in dic.keys():
            list = []
            list.append(k)
            for v in dic[k]:
                list.append(v)
            self.set_excel_list(list,filename,sheet_index,x)
            x = x + 1

    def set_excel_list(self,list,filename,sheet_index,start_r):
        # filename 文件名
        # sheet_index第几个工作表格
        # start_r那一列

        # 读取excel文件
        r_xls = xlrd.open_workbook(filename)
        # 将xlrd的对象转化为xlwt的对象
        excel = copy(r_xls)
        table = excel.get_sheet(sheet_index)
        for y in range(len(list)):
            table.write(y,start_r,str(list[y]))
        excel.save(filename)

自动分组随机选案.py

"""
author:魏振东
date:20200319
func:自动分组随机选案软件
齐齐哈尔地税局需要一个自动分组随机选案软件,要求:

全市有1W多家企事业单位,需要随机核查;

地税局有20人,包括3名科长,15名科员。要求随机分组,不能人指定核查单位。比如本次核查要求分3组,每组4人,科长不能在一组;

分好小组,从1W多家企事业单位中每组随机抽查5家核查;
"""
from opdata.opexcel import Operatingexcel
import random
from opgroup.oplist import Operatinglist

def sub_group(old_lists,group,s_group):
    # old_lists 需要分组的列表
    # group 分几组
    # s_group 每组人数
    # 返回字典类型

    ol = Operatinglist([], old_lists,)
    dic = {}
    # 分成几组
    for i in range(group):
        h = set()
        # 每组分成几个科员
        while (len(h) < s_group):
            # 随机产生不重复的随机数
            h.add(random.randint(0, int(ol.old_list_size())))
        for x in reversed(range(len(h))):
            # 将x取出放入new_lists
            dic.setdefault(i, []).append(ol.del_new_add_old_list(x))
    return dic
if __name__ == '__main__':
    # 获取工作人员以及单位数据
    og = Operatingexcel()
    dic_excel = og.get_excel_dic("data/地税局基本信息.xlsx", "工作人员")
    list_excel = og.get_excel_list("data/地税局基本信息.xlsx", "单位")
    # 输入数据
    group = int(input("请输入分组数"))
    num_of_lead = int(input("请输入每组科长人数"))
    num_of_employ = int(input("请输入每组科员人数"))
    num_of_business = int(input("请输入每组单位人数"))
    # 判断
    while True:
        if group == 0:
            group = int(input("请重新输入分组数"))
        elif num_of_lead == 0 or num_of_lead * group > len(dic_excel["科长"]):
            num_of_lead = int(input("请重新输入每组科长人数"))
        elif num_of_employ == 0 or num_of_employ * group > len(dic_excel["科员"]):
            num_of_employ = int(input("请重新输入每组科员人数"))
        elif num_of_business == 0 or num_of_business * group > len(list_excel):
            num_of_business = int(input("请重新输入每组单位人数"))
        else:
            # 分组
            dic1 = sub_group(dic_excel["科长"], group, num_of_lead)
            dic2 = sub_group(dic_excel["科员"], group, num_of_employ)
            dic3 = sub_group(list_excel, group, num_of_business)

            # 保存入文件
            for i in range(group):
                dic = {}
                dic.setdefault("科长", dic1[i])
                dic.setdefault("科员", dic2[i])
                dic.setdefault("用人单位", dic3[i])
                og.set_excel_dic(dic, "data/分组明细.xlsx", i, 0)
            break

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章