word文档的读入(6)

news2024/11/24 9:49:42

上一个方式,虽然能获取到标准答案和所对应的学生答案,但代码不够简单和优雅。
这时,可以用另一种方式来实现:遍历索引

定义

简单来说,enumerate()函数用来遍历一个可遍历对象中的元素,同时通过一个计数器变量记录当前元素所对应的索引值。

比如刚才的代码中:
存储标准答案的列表standardTwo可以作为可遍历的对象;
而记录学生答案的索引idx则可以看作是用于计数的变量。

enumerate()函数常用于for循环中。当我们既需要一个计数器,又需要可遍历对象的值时,就可以使用enumerate()函数。接下来,我们来看看它的具体用法~

enumerate()函数需要传入一个必选参数:任意可遍历的数据对象
示例中,我们将standardTwo作为必选参数传入,并搭配了一个for循环。idx是用于存储计数器的变量,value则是用于存储每次遍历所返回的元素的变量。

# 使用import导入os模块

import os

# 使用import导入docx

import docx

# 第二大题填空题标准答案

standardTwo = ["东临碣石", "行舟绿水前", "孤山寺北贾亭西", "断肠人在天涯", "故人具鸡黍", "一曲新词酒一杯", "何当共剪西窗烛", "误入藕花深处", "烟笼寒水月笼沙", "万籁此都寂", "初日照高林", "腾蛇乘雾"]

   

# 将乔老师的答题卡文件夹路径 /Users/qiao/answerKey 赋值给变量allKeyPath

allKeyPath = "/Users/qiao/answerKey"

# 使用os.listdir()函数获取该路径下所有的文件,并赋值给变量allItems

allItems = os.listdir(allKeyPath)

# 定义一个空列表allStudentsData存储所有学生数据

allStudentsData = []

# 使用for循环逐个遍历所有学生答题卡

for item in allItems:

    # 定义一个空字典studentData存储单个学生数据

    studentData = {}

   

    # 使用os.path.splitext()函数获取文件名的前半段,并赋值给变量fileName

    fileName = os.path.splitext(item)[0]

    # 使用split()函数以"-"分隔文件名,将第1部分班级信息赋值到学生数据字典的classInfo键里

    studentData["classInfo"] = fileName.split("-")[0]

    # 使用split()函数以"-"分隔文件名,将第2部分姓名信息赋值到学生数据字典的name键里

    studentData["name"] = fileName.split("-")[1]

   

    # 使用os.path.join()函数拼接出答题卡路径,并赋值给变量keyPath

    keyPath = os.path.join(allKeyPath, item)

    # 读取答题卡并赋值给变量doc

    doc = docx.Document(keyPath)

   

    # 读取第四段学号段,并赋值给变量idPara

    idPara = doc.paragraphs[3]

    # 读取学号段中第二个样式块,并赋值给变量idRun

    idRun = idPara.runs[1]

    # 读取学号,并赋值到学生数据字典的id键里

    studentData["id"] = idRun.text

   

    # 使用for循环和enumerate()函数,遍历standardTwo

    for idx,value in enumerate(standardTwo):

        # 格式化输出:索引值n所对应的列表元素是xxx

        print(f"索引值{idx}所对应的列表元素是{value}")

    # 使用append()函数

    # 将studentData添加到总学生数据allStudentsData中

    allStudentsData.append(studentData)

根据输出可以看到:
这个循环遍历了standardTwo列表的所有元素,元素存储在变量value中。
同时,有一个从零开始增加的计数器idx,来记录每个元素对应的索引。
idx默认从0开始,到11结束,这是因为standardTwo这个列表一共只有12个元素。

再来对比一下:
普通的for循环,只能获取到列表中的数据。
for循环搭配enumerate()函数,就能同时获取到数据和对应的索引。

我们已经能在遍历标准答案列表的同时,拥有一个能自动累加的计数器。可以直接根据这个计数器,来访问答题卡里学生的填空题答案。
可是现在计数器是从0开始的,而填空题答案从第9段开始,对应的段落索引是8,有什么办法能让计数器从8开始逐一增加呢?

修改起始索引

要设置索引的初始值,可以直接将初始值作为可选参数传入enumerate()函数中。
比如,我们希望idx从8开始,直接将8传入enumerate()中即可。
根据输出可以看到,现在idx的值,就是学生填空题答案的段落索引,起始值为8。

# 使用import导入os模块

import os

# 使用import导入docx

import docx

# 第二大题填空题标准答案

standardTwo = ["东临碣石", "行舟绿水前", "孤山寺北贾亭西", "断肠人在天涯", "故人具鸡黍", "一曲新词酒一杯", "何当共剪西窗烛", "误入藕花深处", "烟笼寒水月笼沙", "万籁此都寂", "初日照高林", "腾蛇乘雾"]

   

# 将乔老师的答题卡文件夹路径 /Users/qiao/answerKey 赋值给变量allKeyPath

allKeyPath = "/Users/qiao/answerKey"

# 使用os.listdir()函数获取该路径下所有的文件,并赋值给变量allItems

allItems = os.listdir(allKeyPath)

# 定义一个空列表allStudentsData存储所有学生数据

allStudentsData = []

# 使用for循环逐个遍历所有学生答题卡

for item in allItems:

    # 定义一个空字典studentData存储单个学生数据

    studentData = {}

   

    # 使用os.path.splitext()函数获取文件名的前半段,并赋值给变量fileName

    fileName = os.path.splitext(item)[0]

    # 使用split()函数以"-"分隔文件名,将第1部分班级信息赋值到学生数据字典的classInfo键里

    studentData["classInfo"] = fileName.split("-")[0]

    # 使用split()函数以"-"分隔文件名,将第2部分姓名信息赋值到学生数据字典的name键里

    studentData["name"] = fileName.split("-")[1]

   

    # 使用os.path.join()函数拼接出答题卡路径,并赋值给变量keyPath

    keyPath = os.path.join(allKeyPath, item)

    # 读取答题卡并赋值给变量doc

    doc = docx.Document(keyPath)

   

    # 读取第四段学号段,并赋值给变量idPara

    idPara = doc.paragraphs[3]

    # 读取学号段中第二个样式块,并赋值给变量idRun

    idRun = idPara.runs[1]

    # 读取学号,并赋值到学生数据字典的id键里

    studentData["id"] = idRun.text

   

    # 使用for循环和enumerate()函数

    # 遍历储存标准答案的列表standardTwo的同时

    # 生成一个从8开始的index

    for idx,value in enumerate(standardTwo,8):

        # 格式化输出:索引值n所对应的列表元素是xxx

        print(f"索引值{idx}所对应的列表元素是{value}")

    # 使用append()函数

    # 将studentData添加到总学生数据allStudentsData中

    allStudentsData.append(studentData)

enumerate()函数的必选参数

可迭代的对象,示例中是一个列表,该列表存储了填空题的标准答案。

存储列表的元素

value用于在for循环里,存储遍历时standardTwo中的元素。

存储索引值

idx相当于一个计数器变量,用于在for循环里,记录standardTwo里各元素所对应的索引值。
示例中,idx从8开始。

# 使用import导入os模块

import os

# 使用import导入docx

import docx

# 第二大题填空题标准答案

standardTwo = ["东临碣石", "行舟绿水前", "孤山寺北贾亭西", "断肠人在天涯", "故人具鸡黍", "一曲新词酒一杯", "何当共剪西窗烛", "误入藕花深处", "烟笼寒水月笼沙", "万籁此都寂", "初日照高林", "腾蛇乘雾"]

   

# 将乔老师的答题卡文件夹路径 /Users/qiao/answerKey 赋值给变量allKeyPath

allKeyPath = "/Users/qiao/answerKey"

# 使用os.listdir()函数获取该路径下所有的文件,并赋值给变量allItems

allItems = os.listdir(allKeyPath)

# 定义一个空列表allStudentsData存储所有学生数据

allStudentsData = []

# 使用for循环逐个遍历所有学生答题卡

for item in allItems:

    # 定义一个空字典studentData存储单个学生数据

    studentData = {}

   

    # 使用os.path.splitext()函数获取文件名的前半段,并赋值给变量fileName

    fileName = os.path.splitext(item)[0]

    # 使用split()函数以"-"分隔文件名,将第1部分班级信息赋值到学生数据字典的classInfo键里

    studentData["classInfo"] = fileName.split("-")[0]

    # 使用split()函数以"-"分隔文件名,将第2部分姓名信息赋值到学生数据字典的name键里

    studentData["name"] = fileName.split("-")[1]

   

    # 使用os.path.join()函数拼接出答题卡路径,并赋值给变量keyPath

    keyPath = os.path.join(allKeyPath, item)

    # 读取答题卡并赋值给变量doc

    doc = docx.Document(keyPath)

   

    # 读取第四段学号段,并赋值给变量idPara

    idPara = doc.paragraphs[3]

    # 读取学号段中第二个样式块,并赋值给变量idRun

    idRun = idPara.runs[1]

    # 读取学号,并赋值到学生数据字典的id键里

    studentData["id"] = idRun.text

   

    # 使用for循环和enumerate()函数

    # 遍历储存标准答案的列表standardTwo的同时

    # 生成一个从8开始的idx

    for idx,value in enumerate(standardTwo, 8):

        # 格式化输出:索引值n所对应的列表元素是xxx

        print(f"索引值{idx}所对应的列表元素是{value}")

    # 使用append()函数

    # 将studentData添加到总学生数据allStudentsData中

    allStudentsData.append(studentData)

第一个for循环

第一个for循环,也就是最外层的for循环,是在遍历allItems中所有的学生答题卡。

第二个for循环

第二个for循环在第一个for循环里,用于遍历当前同学的填空题答案和对应的标准答案。

总结:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础——使用windows自带远程桌面远程linux

基础——使用windows自带远程桌面远程linux_win11远程桌面登陆linux集群-CSDN博客文章浏览阅读1.1w次,点赞6次,收藏43次。没做配置前远程连接效果如下:前提:如果linux没有图形界面请运行一下命令yum -y groups install "GNOM…

离线语音识别芯片让家用饮水茶吧机更智能

随着科技的飞速发展,智能家居逐渐走进人们的生活。本文将探讨离线语音识别技术如何为家用饮水茶吧机带来智能化的全新体验。通过引入语音模块,家用饮水茶吧机得以实现更加便捷的操作方式,为用户带来更加智能的生活体验。 在如今快速发展的时…

DV证书和OV证书的区别有哪些?主要有5点

众所周知,SSL证书按照验证方式的不同可以分为DV SSL证书、OV SSL证书和EV SSL证书等3种,而对于DV SSL证书和​​​​​​​OV SSL证书的区别很多人都不知晓,为了便于用户选择,锐成信息就DV SSL证书和OV SSL证书的不同点进行一个大…

怎么设置电脑禁止访问网页/网站?一分钟教你五个方法,实现网站访问黑名单,让员工专注力满满!

"心无杂念,方能致远。" 怎么设置电脑禁止访问网页/网站?当员工的注意力频繁被社交媒体、娱乐网站等非工作相关页面吸引时,公司的生产力与信息安全问题便悄然而至! 如何在保障员工适当网络自由的同时,构建…

Unity Apple Vision Pro 开发(九):空间锚点

XR 开发者社区链接: SpatialXR社区:完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 课程试看:https://www.bilibili.com/video/BV1JFHgegEb2 课程完整版,答疑仅社区成员可见,可以通过文章开头的链接加入…

0基础带你入门之Linux简介

1.Linux和Windows对比 Window很明显的特征就是有C盘、D盘登各种磁盘 我们通过点击不同的盘符,点击里面存储的文件进行查阅的操作 而Linux则很简单,只有一个根目录,也可以说只有一个盘,整个系统所有的东西都是在根目录下的 我们可…

【word】目录里面蓝色的mathtype标注“公式节(下一节)”的删除方法

mathtype加“下一节” 在编写论文或大型分章的文档时,如果对mathtype的带编号的公式添加章节序号,则需要用mathtype里面添加“下一节”的符号: 具体方法如下: 打开MathType:在Word文档中,点击工具栏中的MathType图标,打开MathType编辑器。插入分隔符: 将光标放在需要…

异形创意圆形(饼/盘)LED显示屏有什么优势,主要应用场合有哪些

在当今科技日新月异的时代,LED显示屏技术作为数字显示领域的重要一环,正以前所未有的速度推动着视觉传播的创新与发展。其中,异形创意圆形(饼/盘)LED显示屏以其独特的设计理念和广泛的应用前景,逐渐成为了市…

2024年图纸加密软件榜单公布!10款好用的图纸加密软件排行榜

在数字化时代,图纸作为工程设计、建筑规划等领域的核心资产,其安全性至关重要。随着网络攻击和数据泄露事件的频发,图纸加密软件成为了保护企业机密信息的重要工具。2024年,市场上涌现出了众多优秀的图纸加密软件,本文…

数据结构:位图

概念:位图本质上是个数组,用来存放数组,数组中的元素用来判断某个元素是否存在于这个位图集合中,当元素存在时,对应位的值为1;当元素不存在时,对应位的值为0 我们先判断一下下面的例子&#xf…

ai绘图软件哪个好用?值得尝试这6个

中秋佳节将至,当皓月当空,家家户户团圆之时,也是灵感与创意悄然涌动的时刻。 想象一下,一边品尝着甜蜜的月饼,一边用ai绘图工具绘制出心中的月宫仙境,岂不美哉? 今天,就让我们一起…

汽车无钥匙启动功能工作原理

移‌动管家无钥匙启动‌是一种科技化的汽车启动方式,它允许车主在不使用传统钥匙的情况下启动车辆。这种技术通过智能感应系统实现,车主只需携带智能钥匙,当靠近车辆时,车辆能够自动解锁并准备启动。启动车辆时,车主无…

《深度学习》【项目】 OpenCV 身份证号识别

目录 一、项目实施 1、自定义函数 2、定位模版图像中的数字 1)模版图二值化处理 运行结果: 2)展示所有数字 运行结果: 3、识别身份证号 1)灰度图、二值化图展示 运行结果 2)定位身份证号每一个数…

【VScode】配置多账户连接远程服务器

1、下载VSCODE,安装Remote-SSH插件 需要安装Remote-SSH插件和python插件。 2、添加服务器连接配置 这种登录的用户就是user2用户。如果想要登录其他用户,那么就在C:\Users\user.ssh\config文件中将其他用户的信息放在最顶端即可 3、测试链接&#xff0…

mysql的zip解压缩版安装

文章目录 一、MySQL下载二、mysql解压缩版安装1、解压缩2、设置环境变量3、mysql初始化4、安装mysql服务5、启动mysql服务6、连接mysql7、修改初始密码8、安装完成 一、MySQL下载 下载网址:MySQL下载 本文以mysql8.4.2版本为例下载解压缩版。 二、mysql解压缩版安…

JAVA毕业设计172—基于Java+Springboot+vue的智能景区旅游规划管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的智能景区旅游规划管理系统(源代码数据库)172 一、系统介绍 本项目前后端分离(可以改为ssm版本),分为用户、管理员两种角色 1、用户&#xff1…

即插即用篇 | YOLOv8 引入维度互补注意力混合Transformer模块 | 轻量级互补注意力网络:RAMiT引领图像修复新突破

本改进已同步到YOLO-Magic框架! 摘要:虽然许多近期的研究在图像修复(IR)领域取得了进展,但它们通常存在参数数量过多的问题。另一个问题是,大多数基于Transformer的图像修复方法只关注局部或全局特征,导致感受野有限或参数不足的问题。为了解决这些问题,我们提出了一种…

记忆宫殿 v1.2.10 最强大脑训练,有效提升记忆力

记忆宫殿 v1.2.10 是一款非常实用的记忆力训练工具,可以帮助您提高记忆力。尽管界面设计较为简单,但它包含了各种科学的记忆理论和专业的训练方法,如瞬间记忆、短时记忆、机械记忆、配对联想、电话簿和车牌识记等。这些训练项目有助于提升您的…

WebGL系列教程六(纹理映射与立方体贴图)

目录 1 前言2 思考题3 纹理映射介绍4 怎么映射?5 开始绘制5.1 声明顶点着色器和片元着色器5.2 修改顶点的颜色为纹理坐标5.3 指定顶点位置和纹理坐标的值5.4 获取图片成功后进行绘制5.5 效果5.6 完整代码 6 总结 1 前言 上一讲我们讲了如何使用索引绘制彩色立方体&a…