word文档的读入(6)

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

定义

简单来说,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.rhkb.cn/news/422034.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab simulink建模与仿真 第十二章(信号属性库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、信号属性库中的模块概览 1、信号属性操作库 注:数据类型转换模块在第二章中有介绍,本章不再赘述;数据类型传播实例在本章也不进行介绍。 2、信号属性检测库 二、数据类…

构建高效入学审核系统:Spring Boot解决方案

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理大学生入学审核系统的相关信息成为必然。开…

今年白银市场的供需关系矛盾

自从2020年以来,白银手持连续4年都出现了供需缺口,预计今年的供需缺口将进一步扩大。2015年以来,白银总产量始终维持10亿盎司水平上下波动,2015~2023年的年均复合增速在0.4%,预计2024年的产量将下降1%。矿产银的产量从…

万字长文分享腾讯云原生微服务治理实践及企业落地建议

前言 云原生时代,越来越多的企业借助于微服务与容器化,来提升业务弹性与研发协作效率。Dubbo、Spring Cloud、Istio、Dapr 等各类微服务生态组件百家争鸣。从腾讯内部的 CL5 到 ONS、Taf 等,我们也在服务治理的道路上不断的研究探索&#xf…

【开源免费】基于SpringBoot+Vue.JS房产销售系统(JAVA毕业设计)

本文项目编号 T 028 ,文末自助获取源码 \color{red}{T028,文末自助获取源码} T028,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 销…

『功能项目』管理器基类【38】

我们打开上一篇37单例模式框架的项目&#xff0c; 本章要做的事情是编写管理器基类 首先创建脚本&#xff1a;ManagerBase.cs using UnityEngine; public abstract class ManagerBase : MonoBehaviour{public virtual void Init() { } } public class ManagerBase<T> : …

详细讲解hive on tez中各个参数作用,以及如何优化sql

最近经常有优化sql的任务&#xff0c;但是自己能力有限&#xff0c;只能凭经验去优化&#xff0c;现整理加学习一波&#xff0c;也欢迎各位学习和讨论。 我们经常用hivesql 的模型就是 join.如下。 insert overwrite table a select * from b left join c 这里面发生了什么…

医学AI再度得到国自然重大专项青睐,10个立项机会,4000万经费虚位以待|个人观点·24-09-12

小罗碎碎念 昨天国自然基金委公布了几个专项项目&#xff0c;看标题我以为和医学AI无关&#xff0c;多亏了群里的一位小伙伴给我转发指南链接&#xff0c;我才看到与医学AI相关的内容。 项目名称是“重大疾病智慧诊疗”&#xff0c;直接费用总额度约3000-4000万元。计划资助联合…

UE5------光照渲染

自动曝光-------出隧道的一瞬间&#xff0c;外面会非常的亮

【问题回溯】记录处理launcher3滑动卡顿问题

项目问题背景问题描述分析过程初步分析挖根因验证观点修改和验证 结论和反思结论反思 项目 Android14&#xff0c;展锐T606 问题背景 老平台升级Android13升级到Android14&#xff0c;对此问题无影响 问题描述 客户反馈在launcher应用列表中滑动卡顿明显&#xff0c;选中的…

人工智能|集成学习——混合专家模型 (MoE)

随着 Mixtral 8x7B (announcement, model card) 的推出&#xff0c;一种称为混合专家模型 (Mixed Expert Models&#xff0c;简称 MoEs) 的 Transformer 模型在开源人工智能社区引起了广泛关注。在本篇博文中&#xff0c;我们将深入探讨 MoEs 的核心组件、训练方法&#xff0c;…

论文120:Giga-SSL: Self-supervised learning for gigapixel images (2023, CVPR, 开源)

文章目录 1 要点2 方法2.1 算法设计2.2 设计选择 1 要点 题目&#xff1a;用于千兆像素图像的自监督学习 (Giga-SSL: Self-Supervised Learning for Gigapixel Images) 代码&#xff1a;https://github.com/trislaz/gigassl 研究目的&#xff1a; 现有的WSI分类方法依赖于有…

C语言蓝桥杯:语言基础

竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_search函数&#xff0c;用于查找…

运动耳机哪个牌子最好用?年度精选五款好用的骨传导耳机推荐

相信大家都已经深有体会&#xff0c;拿那种常规的入耳式无线蓝牙耳机来做运动耳机&#xff0c;很难满足运动需要。如果选择前两年流行的颈挂式无线运动蓝牙耳机&#xff0c;虽然简单轻巧&#xff0c;但也是入耳式设计&#xff0c;长时间佩戴耳朵不舒服。这样看来&#xff0c;运…

vulhub spring 远程命令执行漏洞(CVE-2022-22963)

1.执行以下命令启动靶场环境并在浏览器访问 cd spring/CVE-2022-22963docker-compose up -ddocker ps 2.反弹shell 构造payload 页面刷新抓包&#xff0c;修改内容 POST /functionRouter HTTP/1.1 Host: 192.168.0.107:8080 Accept-Encoding: gzip, deflate Accept: */* Acc…

uni-app实现web-view和App之间的相互通信

双向实时 如果app端部署成网站&#xff0c;则web-view就是iframe&#xff0c;使用也可以双向通讯 https://uniapp.dcloud.net.cn/component/web-view.html APP端代码 index.vue: <template><web-viewid"m-webview":fullscreen"true":src"…

python-确定进制

题目描述 6 942 对于十进制来说是错误的&#xff0c;但是对于 13 进制来说是正确的。即 6(13)​ 9(13)​42(13)​&#xff0c;而 42(13)​4 13^12 13^054(10)​。 你的任务是写一段程序读入三个整数 p,q 和 r&#xff0c;然后确定一个进制 B(2≤B≤16) 使得 p qr 。如果 B 有…

CMS之Wordpress建设

下载 https://cn.wordpress.org/ 宝塔安装Wordpress 创建网站 上传文件、并解压、剪切文件到项目根目录 安装 -> 数据库信息 -> 标题信息 http://wordpress.xxxxx.com 登录 http://wordpress.xxxxxxxxx.com/wp-admin/ 1. 主题(模板) wordpress-基本使用-02-在主题…

VLAN配置学习笔记

1、VLAN的基础配置命令 &#xff08;1&#xff09;创建VLAN [Huawei] vlan vlan-id 通过此命令创建VLAN并进入VLAN视图&#xff0c;如果VLAN已存在&#xff0c;直接进入该VLAN的视图。 vlan-id是整数形式&#xff0c;取值范围是1&#xff5e;4094。 [Huawei] vlan batch {…

docker管理redis集群

1.拉取redis镜像 docker pull redis拉取完成 [rootlocalhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest a617c1c92774 3 years ago 105MB2.运行redis容器 docker run -itd --name redis-test01 -p 6379:6379…