首页 > 编程语言 >python办公自动化(6)——读取word文档

python办公自动化(6)——读取word文档

时间:2023-09-03 15:55:17浏览次数:43  
标签:studentData 办公自动化 word 函数 allStudentsData python os 变量 赋值

 

# 使用import导入os模块
import os

# 将乔老师的答题卡文件夹路径 /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)
    
# 使用print输出变量allStudentsData
print(allStudentsData)

# 使用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]
    
    # 使用os.path.join()函数拼接出答题卡路径,并赋值给变量keyPath
    keyPath = os.path.join(allKeyPath, item)
    # 读取答题卡并赋值给变量doc 
    doc = docx.Document(keyPath)   
    # 使用print输出doc
    print(doc)
    
    # 使用append()函数将studentData添加到总学生数据allStudentsData中
    allStudentsData.append(studentData)
,用2这个数字减一即可得到对应的索引来进行读取
# 使用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]
    
    # 使用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
    
    # 使用append()函数将studentData添加到总学生数据allStudentsData中
    allStudentsData.append(studentData)
    
# 使用print输出变量allStudentsData
print(allStudentsData)

读取Word内置段落样式名称

第11课中,我们提到“每个段落之中的内容可以具有不同的样式(Style)”。在python-docx模块中,每一个内置样式都有不同的样式名称。

通过访问段落下的 .style 属性,可以获取段落中的样式列表。
然后,再通过访问样式列表下的 .name 属性,就可以获取到真正的样式名称啦。

例如,获取段落para的样式名称,并赋值给变量styleName的代码为:

styleName = para.style.name

    1

“万能思路”是Word文档中的Title(标题)
“适用题目”是Word文档中的Heading 1(标题 1)
“练习”是Word文档中的Heading 2(标题 2)
“答案”是Word文档中的Normal(正文)
八、遍历索引

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

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

***enumerate()***函数常用于for循环中。当我们既需要一个计数器,又需要可遍历对象的值时,就可以使用enumerate()函数。
1)修改起始索引

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

# 使用for循环和enumerate()函数
————————————————
版权声明:本文为CSDN博主「数学ばか」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tianshijie08/article/details/126438427

# 使用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]
    
    # 使用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]
    
    # 使用append()函数将studentData添加到总学生数据allStudentsData中
    allStudentsData.append(studentData)

# 使用for循环和enumerate()函数
    # 遍历储存标准答案的列表standardTwo的同时
    # 生成一个从8开始的index
    for idx,value in enumerate(standardTwo,8):
        # 格式化输出:索引值n所对应的列表元素是xxx
        print(f"索引值{idx}所对应的列表元素是{value}")
#value用于在for循环里,存储遍历时standardTwo中的元素。
#idx相当于一个计数器变量,用于在for循环里,记录standardTwo里各元素所对应的索引值。

批量写入Word文档的表格

需要注意的是,Excel工作簿中这几列存储的数据是整型(int),不是字符串。

但是add_text()和add_run()函数的参数只能接收字符串类型,所以在读取数据时需要将整型数据转化为字符串。
1、数据类型转为字符串

在Python中,可以通过***str()***函数,将一个对象转化为string格式。只需将需要转换的对象作为参数,传入str()函数中即可。
————————————————
版权声明:本文为CSDN博主「数学ばか」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tianshijie08/article/details/126438427

 

 

标签:studentData,办公自动化,word,函数,allStudentsData,python,os,变量,赋值
From: https://www.cnblogs.com/QQ-77Ly/p/17675066.html

相关文章

  • Lnton羚通AI云算力平台在OpenCV-Python中如何创建计数器
    CVUI之计数器cvui::counter()为一个整型或者double值渲染一个计数器,可以点击向上或向下增加或减少值。PythonCPP原型参数theWhere:画布theX:绘制的XtheY:绘制的YtheValue:值theStep:间隔theFormat:格式化的值或数字。例如,%d或%.2f。theFontScale:字体大小theInsideColo......
  • Python学习第二天
    一、Python2or3?Insummary:Python2.xislegacy,Python3.xisthepresentandfutureofthelanguagePython3.0wasreleasedin2008.Thefinal2.xversion2.7releasecameoutinmid-2010,withastatementofextendedsupportforthisend-of-lifereleas......
  • Python:使用Resend发送邮件
    官网:https://resend.com/很简单,只需调用api接口,即可发送邮件需要提前准备好参数api_key从Resend申请的keyto_email接收邮件的邮箱地址importrequestsheaders={'Authorization':'Bearer<api_key>','Content-Type':'application/json',}json_d......
  • python操作sqlite
    importjsonimportsqlite3importpandasaspdclassSqliteTool:def__init__(self,db_path):self.db_path=db_pathself.conn=sqlite3.connect(self.db_path)self.conn.row_factory=sqlite3.Rowself.cursor=self.con......
  • Python安装
    Python3编译安装1.安装编译相关工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-develyuminstalllibffi-devel-y2.下载安......
  • python+selenium自动化测试
    自动化测试工具selenium使用指南python+selenium环境安装:直接pipinstallselenium 安装webdriver打开/关闭浏览器:importtimefromseleniumimportwebdriverbrowser=webdriver.Edge()browser.get("http://www.baidu.com/")time.sleep(5)browser.get("https://ma......
  • python学习
    python学习正则表达式的使用正则表达式以下是替换指定文件夹下文本中的内容对图片形式的pdf提取目录,可以用以下程序叠加多个正则表达式来去除重复项。importosimportredefreplace_timestamp(directory):#遍历目录下的所有文件和文件夹forroot,dirs,fil......
  • 【Python】90%开发者未注意到的Python特性
    1.引言如果你在日常工作中经常使用Python进行编码,那么毫无疑问你会非常喜欢这个简单的Python功能。闲话少说,我们直接开始吧!2.举个栗子例如,要求大家打印列表中元素的值。我想大部分人可以立即使用for循环来执行此操作。li=[10,20,30,40,50]foriinli:print(i)结......
  • 为WordPress插件添加自动检测更新和一键升级功能
    自己做了插件给别人来用,然后更新新功能之后,别人也不知道只能是通过发邮件之类的提醒进行。  今天为大家介绍下,自己开发的插件如何增加版本检测和一键更新。  设置远程服务和添加插件检测功能  1、下载所需文件(搜索:ts小陈)  plugin-update-checker ......
  • 浅析常用的Python Web的几大框架
    在各种语言平台中,python涌现的web框架恐怕是最多的,是一个百花齐放的世界,各种micro-framework、framework不可胜数;猜想原因应该是在python中构造框架十分简单,使得轮子不断被发明。所 以在Python社区总有关于Python框架孰优孰劣的话题。下面就给大家介绍一下python的几大框架: Djan......