• 全部
  • 7天学习
  • 问题求助
  • 公开课
  • 博文广场
  • 精选专栏
  • 公告栏
  • 交流反馈
  • 电子书
  • 代码块
  • Python技能树

7天学习—day7—表格汇总

nit. 7天学习首期学员 2021-09-26 13:45:22

运行截图

名字有相同的情况(报错)

创建学号列

 

汇总时以学号为依据

 

代码

import random
import xlwt
import xlrd
import os

# 存放excel表格的目录,EXCEL文件夹要存在
dir_path = "./EXCEL"
# 文件类型
file_type = 'xls'

# 随机生成名字
def generate_name():
    first_name = '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜'
    last_name = '豫章故郡洪都新府星分翼轸地接衡庐襟三江而带五湖'
    first_name = random.choice(first_name)
    last_name = "".join(random.choice(last_name) for i in range(2))
    return first_name + last_name

# 随机生成成绩
def generate_grade():
    return random.randint(60, 100)

# 创建成绩表
def generate_grade_excel(course, name_list):
    wb = xlwt.Workbook()
    sheet = wb.add_sheet('sheet1')
    sheet.write(0, 0, '姓名')
    sheet.write(0, 1, '期中成绩')
    sheet.write(0, 2, '期末成绩')
    sheet.write(0, 3, '平时成绩')
    sheet.write(0, 4, '学科得分')
    sheet.write(0, 5, '学号')  # nit
    for index in range(1, len(name_list) + 1):
        mid = generate_grade()
        fin = generate_grade()
        usual = generate_grade()
        subj = int((mid + fin) * 0.35 + usual * 0.3)
        number = "20210926" + str(100 + index)  # 添加学号
        sheet.write(index, 0, name_list[index - 1])
        sheet.write(index, 1, mid)
        sheet.write(index, 2, fin)
        sheet.write(index, 3, usual)
        sheet.write(index, 4, subj)
        sheet.write(index, 5, number)
    wb.save(dir_path + '/' + course + '.xls')

# 生成四份相同格式 不同科目成绩的表格
def create_tables():
    # 嵌套for循环
    namelist = [generate_name() for i in range(50)]
    for i in ['大学物理', '高等数学', '大学英语', 'Python程序设计']:
        generate_grade_excel(i, namelist)

# 创建四种科目成绩
create_tables()

# 遍历文件夹下的所有xls表格文件
def get_all_excel(walk_path):
    file_list = []
    for root_dir, sub_dir, files in os.walk(r'' + walk_path):
        for file in files:
            if file.endswith(file_type):
                file_name = os.path.join(root_dir, file)
                file_list.append(file_name)
    return file_list

# 汇总成绩
def summary():
    file_list = get_all_excel(dir_path)
    print(file_list)
    stu = {} # 字典对象
    cursor = [os.path.basename(file).replace('.xls', '') for file in file_list]
    print(cursor)
    for file in file_list:
        wb = xlrd.open_workbook(file)
        sheet = wb.sheet_by_index(0)
        # 创建字典的键值信息,这里使用的是xlrd读取行信息传入setdefault当参数
        for index in range(1, sheet.nrows):
            #stu.setdefault(sheet.cell(index, 0).value, []).append(sheet.cell(index, 4).value)
            stu.setdefault(sheet.cell(index, 5).value, sheet.row_values(index, 0, 5))
    wb = xlwt.Workbook()
    sheet = wb.add_sheet('总成绩')
    sheet.write(0, 0, '学号')
    sheet.write(0, 5, '姓名')
    sheet.write(0, 1, cursor[0])
    sheet.write(0, 2, cursor[1])
    sheet.write(0, 3, cursor[2])
    sheet.write(0, 4, cursor[3])
    index = 1
    for number, grades  in stu.items():
        # sheet.write(index, 0, num)
        sheet.write(index, 0, number)
        sheet.write(index, 1, grades[1])
        sheet.write(index, 2, grades[2])
        sheet.write(index, 3, grades[3])
        sheet.write(index, 4, grades[4])
        sheet.write(index, 5, grades[0])
        index = index + 1
    wb.save('汇总成绩.xls')

summary()

总结

在实践中用到了字典dict,嵌套了之前学的文件搜索、读取excel表格信息

查看了xlrd读取行信息的方法和dict的setdefault方法,最终成功将姓名列写入汇总成绩

汇总的时候以什么为依据就拿什么作为键,其余想要加入汇总行的就当作为值

...全文
135 2 收藏 回复
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复

还没有回复,快来抢沙发~

相关推荐
发帖
Python全栈技术社区
创建于2020-11-25

6535

社区成员

创建由Python学习者和社区专家组成的国内最大的第三方Python中文社区,帮助社区成员更好地入门学习、职业成长和应用实践
帖子事件
编辑了帖子
2021-09-26 14:15
编辑了帖子
2021-09-26 14:12
创建了帖子
2021-09-26 13:45
社区公告

创建由Python学习者和社区专家组成的国内最大的第三方Python中文社区,帮助社区成员更好地入门学习、职业成长和应用实践

  • 这里有最新最全的 Python 学习内容及资源,每月多达4次技术公开课
  • 这里有众多 Python 学习者,陪伴你一起交流成长
  • 这里有专业 Python 社区专家、讲师,帮助你跨越学习瓶颈,解决实操难题
  • 这里有丰富的社区活动,可以开阔眼界,结识更多同伴

【最新活动】:

  1. 周四技术公开课讲师招募中,点击查看详情
  2. “Python 社区专家团” 招募中,点击查看详情