51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2778|回复: 0
打印 上一主题 下一主题

生成excel文件和随机数据,遍历数据,对数据按规则处理后生成新的excel

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2019-6-29 22:25:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    生成excel文件和随机数据,遍历数据,对数据按规则处理后生成新的excel。代码:
    1. import openpyxl
    2. from openpyxl import Workbook
    3. import random

    4. #生成随机数据
    5. def generateRandomInformation(filename):
    6.     workbook = Workbook()
    7.     worksheet = workbook.worksheets[0]
    8.     worksheet.append(['姓名','课程','成绩'])

    9.     #中文名字中的第一、第二、第三个字
    10.     first = '赵钱孙李'
    11.     middle = '伟昀琛东'
    12.     last = '坤艳志'
    13.     subjects = ('语文','数学','英语')
    14.     for i in range(200):
    15.         line = []
    16.         r = random.randint(1,100)
    17.         name = random.choice(first)
    18.         #按一定概率生成只有两个字的中文名字
    19.         if r>50:
    20.             name = name + random.choice(middle)
    21.         name = name + random.choice(last)
    22.         #依次生成姓名、课程名称和成绩
    23.         line.append(name)
    24.         line.append(random.choice(subjects))
    25.         line.append(random.randint(0,100))

    26.         worksheet.append(line)
    27.     #保存数据,生成Excel 2007格式的文件
    28.     workbook.save(filename)

    29. def getResult(oldfile, newfile):
    30.     #用于存放结果数据的字典
    31.     result = dict()

    32.     #打开原始数据
    33.     workbook = openpyxl.load_workbook(oldfile)
    34.     worksheet = workbook.worksheets[0]

    35.     #遍历原始数据
    36.     for row in worksheet.rows:
    37.         if row[0].value == '姓名':
    38.             continue
    39.         #姓名,课程名称,本次成绩
    40.         name, subject, grade = row[0].value, row[1].value, row[2].value

    41.         #获取当前姓名对应的课程名称和成绩信息
    42.         #如果result字典中不包含,则返回空字典
    43.         t = result.get(name, {})
    44.         #获取当前学生当前课程的成绩,若不存在,返回0
    45.         f = t.get(subject, 0)
    46.         #只保留该学生该课程的最高成绩
    47.         if grade > f:
    48.             t[subject] = grade
    49.             result[name] = t

    50.     workbook1 = Workbook()
    51.     worksheet1 = workbook1.worksheets[0]
    52.     worksheet1.append(['姓名','课程','成绩'])

    53.     #将result字典中的结果数据写入Excel文件
    54.     for name, t in result.items():
    55.         print(name,t)
    56.         for subject, grade in t.items():
    57.             worksheet1.append([name, subject, grade])

    58.     workbook1.save(newfile)

    59. if __name__ == '__main__':
    60.     oldfile = r'test.xlsx'
    61.     newfile = r'result.xlsx'
    62.     generateRandomInformation(oldfile)
    63.     getResult(oldfile, newfile)
    复制代码
    执行结果:生成一个老excel和一个新的excel。



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 15:10 , Processed in 0.064221 second(s), 32 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表