51学通信论坛2017新版

标题: 生成excel文件和随机数据,遍历数据,对数据按规则处理后生成新的excel [打印本页]

作者: admin    时间: 2019-6-29 22:25
标题: 生成excel文件和随机数据,遍历数据,对数据按规则处理后生成新的excel
生成excel文件和随机数据,遍历数据,对数据按规则处理后生成新的excel。代码:[attach]5816[/attach]
  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。
[attach]5817[/attach]
[attach]5818[/attach]






欢迎光临 51学通信论坛2017新版 (http://bbs.51xuetongxin.com/) Powered by Discuz! X3