Python实现Excel数据读取与随机成绩生成写入
本文介绍如何使用Python的xlwt和xlrd库读取Excel文件中的学生学号与姓名,并通过random模块生成随机考试成绩。文章详细讲解了行列索引从0开始计数的规则,演示了如何提取指定范围数据、创建新工作表并将学号、姓名及随机生成的成绩写入新的Excel文件,最后保存为指定格式。
任务要求是:从现有的Excel表格中读取学生的学号和姓名,将这些数据分别填入新Excel表格的第一列和第二列,随后生成随机数作为学生的考试成绩。
实现此功能需要引入三个Python库:xlwt、xlrd和random。
导入相关库的命令如下:
import xlwt
import xlrd
import random
假设存在一份如下所示的表格内容:

接下来需要提取该表格中B1至C14区域的数据。
(提示:在对这份电子表格进行操作的时候,要使用到这个电子表格的地址,即表格的储存位置。)
excel=xlrd.open_workbook(G:\python\新建文件夹\表1.xlsx') #打开并读取表格
sheet=excel.sheets()[0] #在原表1中提取第一页中的数据。对excel进行处理时,行列页都是从0开始进行计算
wb=xlwt.Workbook() #创立一个新的excel表格
ws =wb.add_sheet('成绩单') #第一页命名为成绩单
(如果要进行多页操作,要将学号姓名放到两页excel表格中的话可以如下操作:
ws1=wb.add_sheet('1班成绩单')
ws2=wb.add_sheet('2班成绩单')
)
定义两个列表用于存储数据:
a=[] b=[] (这两个list是用来临时存放学号与姓名的) for i in range (1,14): #在大二下学期15级成绩汇总.xlsx表中提取出姓名与学号 a .append(sheet.row_values(i,1,2)) #提取第i行的第1个数,即这个命令抽取的是表中的学号列 b .append(sheet.row_values(i,2,3)) #提取第i行的第2个数,即这个命令抽取的是表中的姓名列
特别注意:Excel中的行和列索引均从0开始计算。例如,表格中第1行第1列的数据在代码处理时对应索引为第0行第0列,第2行第2列对应索引为第1行第1列。Sheet(工作表)的索引同样从0开始。
代码解析:a.append(sheet.row_values(i,1,2))。经过调试发现,i代表第i行,参数1和2表示取值范围,即提取第1个值。根据上述索引规则,这对应表格中第二个单元格的内容。
若对索引范围有疑问,可以尝试修改1和2的值进行验证。
for n in range(13): #将学号与姓名写入新建的表格中,并写在第1页,人数为13人。 ws.write(n,0,a[n][0]) ws.write(n,1,b[n][0])
注意:为何使用a[n][0]而非a[n]?这是由于数据提取后的结构为嵌套列表形式,如a=[[111],[112],[113]……]。目前暂未找到更优的扁平化处理方式,因此通过a[n][0]提取具体数值。在写入新表格时,不能直接将整个列表放入单元格,只能写入文本或允许的数据格式。如有更好的处理方法,欢迎交流。
for q in range(13): #对1班所有人的成绩进行随机抽取数据
ran=random.randint(60,91)
if ran<=70:
ws1.write(q,2,'及格({0})'.format(ran))
if ran>70 and ran<=80:
ws1.write(q,2,'中等({0})'.format(ran))
if ran>80 and ran<=90:
ws1.write(q,2,'良好({0})'.format(ran))
wb.save('15资环1,2班地理信息系统实习成绩.xls') #将新建的表格保存为'15资环1,2班地理信息系统实习成绩.xls'文件
以下代码展示了两个班级数据的处理过程。
原始表格结构如下:

import xlwt #引入xlwt数据库用来将数据写入excel文档中
import xlrd #引入xlrd数据库用来从excel中读取数据
import random #引入random数据库给出随机数
excel=xlrd.open_workbook('G:\python\新建文件夹\表1.xlsx') #从一个已有学号与姓名的excel表格中提取出对应的学号和姓名
sheet=excel.sheets()[0]
wb=xlwt.Workbook() #创立一个新的excel表格
ws1=wb.add_sheet('1班成绩单') #第一页命名为1班成绩单
ws2=wb.add_sheet('2班成绩单') #第一页命名为2班成绩单
a1=[] #表1中的学号列
a2=[] #表2中的学号列
b1=[] #表1中的姓名列
b2=[] #表2中的姓名列
for i in range (1,14): #表1.xlsx表中提取出1班的姓名与学号
a1.append(sheet.row_values(i,1,2))
b1.append(sheet.row_values(i,2,3))
for j in range (14,33): #在表1.xlsx表中提取出1班的姓名与学号
a2.append(sheet.row_values(j,1,2))
b2.append(sheet.row_values(j,2,3))
for n in range(13): #将1班学号与姓名写入新建的表格中,并写在第1页.1班人数为13人
ws1.write(n,0,a1[n][0])
ws1.write(n,1,b1[n][0])
for m in range(19): #将2班学号与姓名写入新建的表格中,并写在第2页.2班人数为19人
ws2.write(m,0,a2[m][0])
ws2.write(m,1,b2[m][0])
for q in range(13): #对1班所有人的成绩进行随机抽取数据
ran=random.randint(60,91) #分数为60-90之间
if ran<=70:
ws1.write(q,2,'及格({0})'.format(ran)) #以下表示在各分数段的等级
if ran>70 and ran<=80:
ws1.write(q,2,'中等({0})'.format(ran))
if ran>80 and ran<=90:
ws1.write(q,2,'良好({0})'.format(ran))
for d in range(19): #对2班所有人的成绩进行随机抽取数据
ran=random.randint(60,91)
if ran<=70:
ws2.write(d,2,'及格({0})'.format(ran))
if ran>70 and ran<=80:
ws2.write(d,2,'中等({0})'.format(ran))
if ran>80 and ran<=90:
ws2.write(d,2,'良好({0})'.format(ran))
wb.save('15资环1,2班地理信息系统实习成绩.xls') #将新建的表格保存为'15资环1,2班地理信息系统实习成绩.xls'文件
最终生成结果如下:

总结
以上介绍了基于Python实现从Excel读取数据并生成随机数写入Excel的方法,希望有所帮助。如有疑问请留言,小编会及时回复。感谢支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









