Word文档的读入【2】
现在,乔老师已经了解了Word文档的基本结构。
下面,我们通过观察一份答题卡来思考一下每条信息的具体位置。这样,在后面几天的学习和操作中,我们就能更快、更准确地读取到答题卡中的信息。
这份答题卡是由一个表格和一些段落组成。
其中,学生的学号位于第4个段落中的第二个样式块。

接下来,我们需要读取答题卡中的表格来获取学生的选择题答案。
表格中的第二行是学生填写的内容,只需依次读取这一行中的信息,然后和标准答案进行对比,便可以算出选择题分数。

最后,通过依次读取剩下段落中的第二个样式块,我们便可以获取到学生的填空题内容。
填空题的第一题位于答题卡中的第9段,只需逐行读取到答题卡中的最后一个段落,然后和标准答案进行对比,便可以算出填空题的分数。

根据刚刚的定位,我们便可以得出获取学生学号、答题内容和对应分数的具体步骤:
1. 逐个读取班级文件夹下的学生答题卡
2. 获取学生的学号
3. 读取选择题答案并计算分数
4. 读取填空题答案并计算分数

在昨天的课程中,我们已经获取了学生的班级和姓名信息。现在,我们来根据昨天的定位,获取答题卡中学生的学号吧~具体步骤如下:
1. 安装和导入相关模块 2. 读取答题卡
3. 读取指定段落 4. 读取指定样式块
5. 获取文本内容

| 在终端中输入pip install python-docx安装模块。 |
| 要使用Python对Word文档进行读取,我们需要安装一个用于读取数据的工具python-docx。python-docx是一个用于创建和更新Word文档的开源模块。需要注意的是,该模块只可读取、写入.docx文件,不支持.doc文件。安装python-docx非常简单,在终端中输入代码:pip install python-docx即可。 |
| 代码:pip install python-docx |
| 完善代码(请使用import导入docx) |
| 安装完python-docx模块后,下一步就是导入这个模块。需要注意的是,导入python-docx模块需要使用import docx,而不是import python-docx。 |
| # 使用import导入os模块 import os # 使用import导入docx import docx # 将乔老师的答题卡文件夹路径 /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]
# 使用append()函数将studentData添加到总学生数据allStudentsData中 allStudentsData.append(studentData) |

在安装和导入python-docx之后,读取指定路径下的Word文档需要使用函数:docx.Document()。只需将Word文档的路径作为参数传入该函数中即可。docx.Document()函数读取成功后,会返回一个Word文档对象。
| 逐步完善代码(读取当前答题卡并赋值给变量doc。) |
| 乔老师要读取文件夹中的每一份答题卡,就需要在for循环里,先使用os.path.join()函数拼接出当前答题卡的路径。我们将拼接好的路径赋值给了keyPath。 |
| # 使用import导入os模块 import os # 使用import导入docx import docx # 将乔老师的答题卡文件夹路径 /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]
# TODO 使用os.path.join()函数拼接出答题卡路径,并赋值给变量keyPath keyPath = os.path.join(allKeyPath,item) # TODO 读取答题卡并赋值给变量doc doc = docx.Document(keyPath) # 使用print输出doc print(doc) # 使用append()函数将studentData添加到总学生数据allStudentsData中 allStudentsData.append(studentData) |
总结:

相关文章:
Word文档的读入【2】
现在,乔老师已经了解了Word文档的基本结构。 下面,我们通过观察一份答题卡来思考一下每条信息的具体位置。这样,在后面几天的学习和操作中,我们就能更快、更准确地读取到答题卡中的信息。 这份答题卡是由一个表格和一些段落组成。…...
报名开启 | 游戏开发缺队友?首期繁星招聘会来袭!
**点击蓝链领取游戏开发教程 ** EE GAMES 创作者社区是专注于链接每一位游戏创作者,提供社区交流、团队匹配、经验共享、成果展示、知识整合、最新活动资讯等全方位服务的游戏领域垂类社区。 这里不仅仅是一个游戏创作的互助平台,更是每一位游戏创作者…...
无法加载源https://api.nuget.org/v3/index.json的服务索引
我是用的visual studio2022 17.11.2版本,在运行.net c#项目的时候显示“无法加载源https://api.nuget.org/v3/index.json的服务索引”,从网上找了一堆方法全部没用,最后用这个方法解决了。亲测有效家人们 关闭VS,删除C:\Users\xx…...
C#--CM+Fody+HCWPF开发组合
CM:Caliburn.Micro(简称CM)一经推出便备受推崇,作为一款MVVM开发模式的经典框架,越来越多的受到wpf开发者的青睐.我们看一下官方的描述:Caliburn是一个为Xaml平台设计的小型但功能强大的框架。Micro实现了各种UI模式,用…...
力扣474-一和零(Java详细题解)
题目链接:474. 一和零 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包,所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话&#…...
【话题】量子计算:前沿技术与应用前景深度解析
引言 在当今信息时代,计算能力已成为推动科技进步和社会发展的重要驱动力。随着摩尔定律逐渐接近其物理极限,传统计算机硬件的性能提升面临前所未有的挑战。在此背景下,量子计算作为一种革命性的计算范式,凭借其独特的量子力学属性…...
第11章 32位x86处理器编程架构
第11章 32位x86处理器编程架构 IA-32(INTEL Architecture, 32-bit):INTEL 32位处理器架构简称IA-3,以8086处理器为基础发展起来的。该章重点介绍了IA-32处理器的工作方式和相关技术。 IA-32架构的基本执行环境 寄存器的扩展 32位处理器通用寄存器&am…...
加密软件是什么?有哪些用处呢?
一、加密软件是什么? 加密软件用于对数据进行加密和解密的工具或程序。其主要功能是通过使用加密算法将原始数据转换为密文,以保护数据的机密性和安全性,防止未经授权的访问和泄露。加密软件提供用户友好的界面和操作方式,使用户…...
浅谈C#之任务调度TaskScheduler
一、基本介绍 TaskScheduler 是一个抽象类,用于控制任务的执行方式,特别是它们如何被安排到线程池中的线程上执行。 TaskScheduler 负责将 Task 对象排队并决定何时、以何种方式执行这些任务。 二、TaskScheduler的作用 调度任务:将任务分配…...
SQL server 日常运维命令
一、基础命令 查看当前数据库的版本 SELECT VERSION;查看服务器部分特殊信息 select SERVERPROPERTY(Nedition) as Edition --数据版本,如企业版、开发版等,SERVERPROPERTY(Ncollation) as Collation --数据库字符集,SERVERPROPERTY(Nservername) as Serve…...
基于协同过滤算法+SpringBoot+Vue+MySQL的商品推荐系统
系统展示 用户前台界面 管理员后台界面 系统背景 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广泛运用,以及…...
VSCode中latex文件(Misplaced alignment tab character .LaTeX
Misplaced alignment tab character &.LaTeX 先给出参考文章1 Misplaced alignment tab character &.LaTeX 把bib文件中的 &改为 and 。删除原有的bbl文件、重新运行 选择这个运行 这个错误在overleaf上并没有遇到、在vscode上遇到了 方法二就是把 &改为…...
如何给电脑设置静态IP地址:详细步骤与指南
在日常生活和工作中,我们经常需要使用电脑连接到网络。通常情况下,电脑会自动获取IP地址,但有时候,由于特定的网络需求或配置,我们可能需要手动为电脑设置静态IP地址。本文将详细介绍如何在Windows和Mac操作系统中为电…...
【Mysql】系统服务启动访问报错问题处理:this is incompatible with sql_mode=only_full_group_by
一、背景: 本来已经正常运行的平台,突然有一天由于对服务器进行部分操作迁移,发现jar可以正常启动,但是访问功能一直报错,监控后台日志后,发现了问题: 报错的具体信息如下: Caused…...
安装oh-my-zsh后报错zsh: command not found: conda问题解决
zsh: command not found: conda问题解决 一、问题介绍与环境介绍 系统为macOS Sonoma 14.5 所用终端为zsh 主要问题:安装了oh-my-zsh之后conda命令在终端中不可用。 二、原因分析 终端中zsh的可访问的程序一般放在/bin, /usr/bin, /usr/local/bin,~/bi…...
避免 PyCharm 将该 Python 脚本作为测试运行
为了避免 PyCharm 将该 Python 脚本作为测试运行(即 pytest 自动捕获),你可以做以下几步来确保该脚本作为普通的 Python 程序执行,而不是作为 pytest 运行。 解决方案: 1. 确保文件名不以 test_ 开头: P…...
【Sqlite】.NET Framework使用Sqlite的注意事项
注意:NuGet引入System.Data.SQLite.Core不要引入System.Data.SQLite 注意:局域网共享链接 正常链接Data Source\\BAT-OCV\SqliteDB\batOCV.db;Version3;PoolingTrue;Max Pool Size100; 局域网链接Data Source\\\BAT-OCV\SqliteDB\batOCV.db;Version3;P…...
2024下《系统集成项目管理工程师》50个高频考点汇总!值得收藏
11月软考已经迫在眉睫,准备考系统集成的小伙伴们开始准备了吗? 这里给大家整理了50个高频考点,涵盖全书80%重点,先把这个存下!再慢慢看书,边看书边背这个,事半功倍。 1、信息安全的基本要素有&…...
Java 远程调用接口(RMI)
Java Remote Method Invocation (RMI) 概述 Java 的 Remote Method Invocation (RMI) 是一种允许 Java 程序调用远程对象的方法。这种方法类似于本地调用,但目标对象实际位于远程 JVM(Java 虚拟机)中。RMI 实现了分布式计算,允许…...
torch.squeeze()
在深度学习中经常会遇见这个函数,现在来说一下这个函数的用法,其实很简单的。 函数作用 函数的作用就是:挤压size为1的维度,挤压也就是remove。如果size不是1的话,那就没变化。 使用说明 在使用的时候,…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
