美文网首页
思政课成绩统计

思政课成绩统计

作者: Noza_ea8f | 来源:发表于2021-05-27 16:09 被阅读0次

    main.py

    import xlrd
    import pandas as pd
    from xlutils.copy import copy
    from lib.func import auto_fill_0, get_ls_max_len
    
    path = '2019.7期末考试成绩最终发布.xls'
    rb = xlrd.open_workbook(path, formatting_info=True)
    wb = copy(rb)
    sheet = rb.sheet_by_name('sheet1')
    
    # 获取行列数
    rows = sheet.nrows
    cols = sheet.ncols
    
    # class_sz = ['04389', '04385', '04391', '04390', '04384']
    # 思政课字典
    class_sz = {'04389': [], '04385': [], '04391': [], '04390': [], '04384': []}
    
    # 获取所有思政课成绩
    for row in range(0, rows):
        for col in range(0, cols):
            # 逐行逐列获取每个单元格的值
            val = sheet.cell_value(row, col)
            # 将获取的值在字典中进行比对
            for k, v in class_sz.items():
                # 如果找到了课程ID
                if val == k:
                    # 跳过两行,因为下一行是课程名称
                    new_row = row + 2
                    # 从该列开始往下逐行查询
                    for i in range(new_row, rows):
                        # 获取成绩值
                        score = sheet.cell_value(i, col)
                        # 左侧A列数值长度,因为最左侧列是学号,长度为13
                        A_len = len(sheet.cell_value(i, 0))
                        # 如果左侧A列数值不等于13
                        if A_len != 13:
                            break
                        elif score != '':
                            v.append(score)
    
    d = auto_fill_0(d=class_sz, max_l=get_ls_max_len(class_sz))
    # print(d)
    # 写入Excel
    df = pd.DataFrame(d)
    
    writer = pd.ExcelWriter('xx.xlsx')
    df.to_excel(writer, index=False)
    writer.save()
    

    func.py

    import sys
    
    sys.setrecursionlimit(100000)  # 设置递归深度(可为任意值)
    
    
    # 运用递归将所有列表长度统一
    def auto_fill_0(d, max_l):
        for k, v in d.items():
            if len(v) < max_l:
                v.append(0)
                auto_fill_0(d, max_l)
        return d
    
    
    # 这是一个字典
    # d = {'a': [1, 2],
    #      'b': [3, 4, 5],
    #      'c': [6],
    #      'd': [7, 8]}
    
    
    # 我要找出字典中值列表最长的列表长度
    def get_ls_max_len(d):
        ls = []
        for k, v in d.items():
            ls.append(len(v))
    
        ls = sorted(ls)
        # 最长的列表长度
        max_l = ls[-1]
        return max_l
    
    # print(get_ls_max_len(d))
    

    相关文章

      网友评论

          本文标题:思政课成绩统计

          本文链接:https://www.haomeiwen.com/subject/kshdsltx.html