【办公类-21-04】20240227单个word按“段落数”拆分多个Word(三级育婴师操作参考题目 有段落文字和表格 1拆13份)

作品展示

背景需求:

最近学育婴师,老师发了一套doc操作参考

但是老师是一节节授课的,每节都有视频,如果做在一个文档里,会很长很长,容易找不到。所以我需要里面的单独文字的docx。

以前的方法是

1、打开源文件,保留第1题,删除2-13题,再另存题目1,

2、再恢复原始状态,保留第2题,删除第1题、第3-13题,在另存题目2

……

之前试过把多个word合并成1个word,

【办公类-21-01】20240117育婴师操作题word合并1.0-CSDN博客文章浏览阅读912次,点赞15次,收藏10次。【办公类-21-01】20240117育婴师操作题word合并1.0https://blog.csdn.net/reasonsummer/article/details/135651389?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135651389%22%2C%22source%22%3A%22reasonsummer%22%7D

现在想试试能不能把1个word拆分成多个word

解题思路:

一、另存为docx文件

二、去除word里面的空行回车

from docx import Document
from openpyxl import load_workbook
import glob
import re#  将模板 Excel 读取进程序:
path = r"C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题"
file=path + r'\育婴师三级教育操作参考.docx'  # 必须是docx
print(file)
# C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题\育婴师三级教育操作参考2.docx# 提取四个加粗标题所在的行数    # 参考https://www.shouxicto.com/article/96876.html
doc= Document(file)# 遍历每个段落并判断是否为空白行,如果有空白行,就删除
for paragraph in doc.paragraphs:if not paragraph.text.strip():# 如果是空白行则将其从文档中移除p = paragraph._elementp.getparent().remove(p)     doc.save(path + r'\育婴师三级教育操作参考(去掉回车).docx')

三、读取word里面“加粗标题”所在的行


print('----2、读取word里面标题加粗段落的行数------')filename=path + r'\育婴师三级教育操作参考(去掉回车).docx'# 打开Word文档
doc = Document(filename)d=len(doc.paragraphs)
print(d)
# docx没有去掉空行前,一共有258段文字
# docx去掉空行后,一共有244段文字h=[]
s=[]
# 遍历文档中的段落
for i, paragraph in enumerate(doc.paragraphs):if paragraph.runs:# 检查段落中的所有运行对象for run in paragraph.runs:if run.bold:# 如果运行对象的文字为加粗,则打印段落索引# print("段落", i, "的文字被加粗了")h.append(i)# 提取每一份的加粗标题t=doc.paragraphs[i].text                # print(t)s.append(t)
s=list(set(s))
s.sort()
# print(s)
# ['3.1.1 运用发育诊断法对2岁婴儿的以不同步子行走能力进行测试', '3.1.2 为2岁婴儿编制规范、适宜的个别化游戏活动计划(5分钟)', '3.1.3 设计生活中婴儿动手自理的活动(5分钟)', '3.1.4 六个月以内
# 的婴儿的精细动作的日常练习活动设计(5分钟)', '3.1.5 列举两种感统练习器械,并简述其活动功能(5分钟)', '3.2.1 请阐述对婴儿语言发展水平的观察与记录方法(5分钟)', '3.2.2 如何制定婴幼儿个别化
# 语言培养计划(5分钟)', '3.2.3 设计一份记录表格,观察一个6个月左右的宝宝寻找不同声源的感知练习过程(5分钟)', '3.2.4 设计一个观察表,观察并调整婴儿在视动协调方面的练习(5分钟)', '3.2.5 设 
# 计一个观察表,记录孩子可能发生的行为(5分钟)', '3.3.1 如何对待任性的孩子(5分钟)', '3.3.2 如何对待爱哭的孩子(5
# print(len(s))
# 13h=list(set(h))
h.sort()
j=h[1:]
j.append(d)print(h)
print(len(h))
print(j)
print(len(j))
# # 去掉空行前
# # [1, 25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238]
# # 13
# # [25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238, 258]
# # 13
# # 去掉空行后
# # [1, 23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224]
# # 13
# # [23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224, 244]

1、提取加粗标题的文字部分,做保存的文件名

2、提取两个黑体加粗标题之间的行数

四、word里面有表格,它也占了段落数,但段落里不显示

直接删除小于23并大于45的段落,生成第2套题目

print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
# 拆分docx(读取加粗的行,这些行还要加上表格的行数)
# 13张表格里面分别有几个表格imagePath1=path+r'\育婴师13题拆分'
if not os.path.exists(imagePath1):  # 判断存放图片的文件夹是否存在os.makedirs(imagePath1)  # 若图片文件夹不存在就创建# for  x in range(len(s)):# 获取第一页的段落和表格
# a=int(j[x]+o[x])
for x in range(len(s)):doc = Document(filename)first_page_paragraphs = []first_page_tables = []for element in doc.element.body:if element.tag.endswith(('}p', '}tbl')):if element.getparent().index(element) >int(j[x]) :if element.tag.endswith('p'):first_page_paragraphs.append(element)else:first_page_tables.append(element)if element.getparent().index(element)<int(h[x]):if element.tag.endswith('p'):first_page_paragraphs.append(element)else:first_page_tables.append(element)# print(int(j[x]+o[x]))# print(int(h[x]+o[x]))# 删除第一页的段落和表格for paragraph in first_page_paragraphs:p = paragraph.getparent()p.remove(paragraph)for table in first_page_tables:t = table.getparent()t.remove(table)# # 保存修改后的文档为新文件# doc.save(path+r'01.docx')doc.save(imagePath1+r'\{} {}.docx'.format('%02d'%x,s[x]))

结果第2份前面多了2行,后面少了2行。

分析后认为,可能导致错行的原因是每份操作题内有“表格”。

第1份题目里面有2个表格,也占了2行,虽然表格被删除了,但是段落占位没有删除,导致第2份题目表格出现正好2行的的错位。

计算每份题中表格的数量 2、1、0、1、1、1、1、1、1、1、1、0、0、0

print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
# 拆分docx(读取加粗的行,这些行还要加上表格的行数)
# 13张表格里面分别有几个表格bg=[2,1,0,1,1,1,1,1,1,1,0,0,0]# 第一张表是原来的段落数,所以就是0
bg.insert(0,0)
# print(bg)# 数字累加
o = []
sum = 0
for num in bg:sum += numo.append(sum)
print(o)
# [0, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
# # # 没有空行的内容

        确保第2份开始的段落数+累计的表格数

结果正确

全部代码

# https://blog.csdn.net/lau_jw/article/details/114383781'''
目的:育婴师word题目拆分成多个表格(根据标题(加粗)所在行数拆分)
作者:阿夏
时间:2024年2月27日
'''from docx import Document
from openpyxl import load_workbook
import glob
import re,osprint('----1、word数据清洗------')path = r"C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题"
file=path + r'\育婴师三级教育操作参考.docx'  # 必须是docx
print(file)
# C:\Users\jg2yXRZ\OneDrive\桌面\三级操作题\育婴师三级教育操作参考2.docx# 提取四个加粗标题所在的行数    # 参考https://www.shouxicto.com/article/96876.html
doc= Document(file)# 遍历每个段落并判断是否为空白行,如果有空白行,就删除
for paragraph in doc.paragraphs:if not paragraph.text.strip():# 如果是空白行则将其从文档中移除p = paragraph._elementp.getparent().remove(p)     doc.save(path + r'\育婴师三级教育操作参考(去掉回车).docx')print('----2、读取word里面标题加粗段落的行数------')filename=path + r'\育婴师三级教育操作参考(去掉回车).docx'# 打开Word文档
doc = Document(filename)d=len(doc.paragraphs)
print(d)
# docx没有去掉空行前,一共有258段文字
# docx去掉空行后,一共有244段文字h=[]
s=[]
# 遍历文档中的段落
for i, paragraph in enumerate(doc.paragraphs):if paragraph.runs:# 检查段落中的所有运行对象for run in paragraph.runs:if run.bold:# 如果运行对象的文字为加粗,则打印段落索引# print("段落", i, "的文字被加粗了")h.append(i)# 提取每一份的加粗标题t=doc.paragraphs[i].text                # print(t)s.append(t)
s=list(set(s))
s.sort()
# print(s)
# ['3.1.1 运用发育诊断法对2岁婴儿的以不同步子行走能力进行测试', '3.1.2 为2岁婴儿编制规范、适宜的个别化游戏活动计划(5分钟)', '3.1.3 设计生活中婴儿动手自理的活动(5分钟)', '3.1.4 六个月以内
# 的婴儿的精细动作的日常练习活动设计(5分钟)', '3.1.5 列举两种感统练习器械,并简述其活动功能(5分钟)', '3.2.1 请阐述对婴儿语言发展水平的观察与记录方法(5分钟)', '3.2.2 如何制定婴幼儿个别化
# 语言培养计划(5分钟)', '3.2.3 设计一份记录表格,观察一个6个月左右的宝宝寻找不同声源的感知练习过程(5分钟)', '3.2.4 设计一个观察表,观察并调整婴儿在视动协调方面的练习(5分钟)', '3.2.5 设 
# 计一个观察表,记录孩子可能发生的行为(5分钟)', '3.3.1 如何对待任性的孩子(5分钟)', '3.3.2 如何对待爱哭的孩子(5
# print(len(s))
# 13h=list(set(h))
h.sort()
j=h[1:]
j.append(d)print(h)
print(len(h))
print(j)
print(len(j))
# # 去掉空行前
# # [1, 25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238]
# # 13
# # [25, 48, 64, 77, 95, 117, 136, 158, 179, 200, 218, 238, 258]
# # 13
# # 去掉空行后
# # [1, 23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224]
# # 13
# # [23, 45, 60, 72, 89, 110, 127, 148, 168, 188, 205, 224, 244]print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
# 拆分docx(读取加粗的行,这些行还要加上表格的行数)
# 13张表格里面分别有几个表格bg=[2,1,0,1,1,1,1,1,1,1,0,0,0]# 第一张表是原来的段落数,所以就是0
bg.insert(0,0)
# print(bg)# 数字累加
o = []
sum = 0
for num in bg:sum += numo.append(sum)
print(o)
# [0, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
# # # 没有空行的内容print('----3、读取word里面标题加粗段落的行数+表格占的段落数------')
# 拆分docx(读取加粗的行,这些行还要加上表格的行数)
# 13张表格里面分别有几个表格imagePath1=path+r'\育婴师13题拆分'
if not os.path.exists(imagePath1):  # 判断存放图片的文件夹是否存在os.makedirs(imagePath1)  # 若图片文件夹不存在就创建# for  x in range(len(s)):# 获取第一页的段落和表格
# a=int(j[x]+o[x])
for x in range(len(s)):doc = Document(filename)first_page_paragraphs = []first_page_tables = []for element in doc.element.body:if element.tag.endswith(('}p', '}tbl')):if element.getparent().index(element) >int(j[x]+o[x]) :if element.tag.endswith('p'):first_page_paragraphs.append(element)else:first_page_tables.append(element)if element.getparent().index(element)<int(h[x]+o[x]):if element.tag.endswith('p'):first_page_paragraphs.append(element)else:first_page_tables.append(element)# print(int(j[x]+o[x]))# print(int(h[x]+o[x]))# 删除第一页的段落和表格for paragraph in first_page_paragraphs:p = paragraph.getparent()p.remove(paragraph)for table in first_page_tables:t = table.getparent()t.remove(table)# # 保存修改后的文档为新文件# doc.save(path+r'01.docx')doc.save(imagePath1+r'\{} {}.docx'.format('%02d'%x,s[x]))

感悟:

1、删除段落和表格:本篇用删除段落和表格的方式保留需要的段落部分

后续思考:可以试试复制法——复制25-47的内容,清空文档,再黏贴25-47的内容,另存为。

2、段落内包含表格占位,有点难办

段落里有表格占位,这个很麻烦,如果有很多份操作题需要拆开,我不可能去看每套题目里面有几张表格,并做段落数累加。后续还要再研究段落数与表格在第几段上。

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

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

相关文章

FL Studio 21.2.3.3586 for Mac中文版新功能介绍及2024年最新更新日志

如果你正计划学习音乐制作&#xff0c;一款强大且易学的音乐制作软件是必不可少的。由于很多小伙伴对音乐制作软件没有实际体验过&#xff0c;到底选择哪一款软件最合适成为当下最纠结的问题。 这里为大家推荐一款功能强大且适合新手小伙伴的音乐编曲软件—FL Studio 21.2.3.35…

GPT 的基础 - T(Transformer)

我们知道GPT的含义是&#xff1a; Generative - 生成下一个词 Pre-trained - 文本预训练 Transformer - 基于Transformer架构 我们看到Transformer模型是GPT的基础&#xff0c;这篇博客梳理了一下Transformer的知识点。 BERT:通过自监督的方式,在大规模语料上预训练得到的Tran…

react 路由的基本原理及实现

1. react 路由原理 不同路径渲染不同的组件 有两种实现方式 ● HasRouter 利用hash实现路由切换 ● BrowserRouter 实现h5 API实现路由切换 1. 1 HasRouter 利用hash 实现路由切换 1.2 BrowserRouter 利用h5 Api实现路由的切换 1.2.1 history HTML5规范给我们提供了一个…

概率基础——正态分布

概率基础——正态分布 介绍 正态分布&#xff0c;又称高斯分布&#xff0c;是统计学中最重要的连续概率分布之一。它在自然界和人类活动中都有广泛的应用&#xff0c;被广泛用于描述各种自然现象和社会现象。正态分布的曲线呈钟形&#xff0c;以其特有的形态而著称&#xff0…

Ubuntu常用状态命令

目录 一、温度 1&#xff0c;查看CPU温度 2&#xff0c;查看硬盘温度 二、CPU状态 1&#xff0c;显示CPU的详细信息&#xff0c;包括型号、频率、缓存等 2&#xff0c;显示CPU架构、CPU核心数、线程数、频率等信息 三、登录状态 1&#xff0c;查看成功登录的用户 2&am…

day02_前后端环境搭建(前端工程搭建,登录功能说明,后端项目搭建)

文章目录 1. 软件开发介绍1.1 软件开发流程1.2 角色分工1.3 软件环境1.4 系统的分类 2. 尚品甄选项目介绍2.1 电商基本概念2.1.1 电商简介2.1.2 电商模式B2BB2CB2B2CC2BC2CO2O 2.2 业务功能介绍2.3 系统架构介绍2.4 前后端分离开发 3. 前端工程搭建3.1 Element-Admin简介3.2 El…

线性表——单链表的增删查改

本节复习链表的增删查改 首先&#xff0c; 链表不是连续的&#xff0c; 而是通过指针联系起来的。 如图&#xff1a; 这四个节点不是连续的内存空间&#xff0c; 但是彼此之间使用了一个指针来连接。 这就是链表。 现在我们来实现链表的增删查改。 目录 单链表的全部接口…

MySQL:开始深入其数据(一)DML

在上一章初识MySQL了解了如何定义数据库和数据表&#xff08;DDL&#xff09;&#xff0c;接下来我们开始开始深入其数据,对其数据进行访问&#xff08;DAL&#xff09;、查询DQL&#xff08;&#xff09;和操作(DML)等。 通过DML语句操作管理数据库数据 DML (数据操作语言) …

Qt篇——QTableWidget保存表格数据到Excel文件中,读Excel内容到QTableWidget

表格和excel例子如下图所示&#xff1a; 一、QTableWidget保存表格数据到Excel文件中 代码如下&#xff1a; &#xff08;pro文件中添加QT axcontainer&#xff09; #include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time QDateTi…

路由器端口映射如何配置?

在网络通信中&#xff0c;路由器是一个重要的设备&#xff0c;它负责将数据包从一个网络传输到另一个网络。路由器的端口映射配置是一种重要的设置&#xff0c;可以使外部网络中的计算机通过访问路由器上的特定端口与内部网络中的计算机进行通信。本文将介绍什么是路由器端口映…

4核8G服务器选阿里云还是腾讯云?价格性能对比

4核8G云服务器多少钱一年&#xff1f;阿里云ECS服务器u1价格955.58元一年&#xff0c;腾讯云轻量4核8G12M带宽价格是646元15个月&#xff0c;阿腾云atengyun.com整理4核8G云服务器价格表&#xff0c;包括一年费用和1个月收费明细&#xff1a; 云服务器4核8G配置收费价格 阿里…

全面升级!Apache HugeGraph 1.2.0版本发布

图数据库以独特的数据管理和分析能力&#xff0c;在企业数智化转型的过程中正在成为数据治理的核心&#xff0c;根据IDC调研显示&#xff0c;95%的企业认为图数据库是重要的数据管理工具&#xff0c;超过65%的厂商认为在业务上图数据库优于其他选择&#xff0c;尤其是在金融风控…

Centos6安装PyTorch要求的更高版本gcc

文章目录 CentOS自带版本安装gcc 4的版本1. 获取devtoolset-8的yum源2. 安装gcc3. 版本检查和切换版本 常见问题1. 找不到包audit*.rpm包2. 找不到libcgroup-0.40.rc1-27.el6_10.x86_64.rpm 的包4. cc: fatal error: Killed signal terminated program cc1plus5. pybind11/pybi…

工具使用-pwncat

pwncat是一个命令和控制框架&#xff0c;可以将基本的反向或绑定shell转化为一个功能齐全的利用平台。然后&#xff0c;它将尝试在远程主机上启动一个伪终端&#xff0c;并为您提供原始终端访问。 但pwncat不止于此。除了自动的获取全交互式终端外&#xff0c;pwncat还提供了一…

微服务-商城订单服务项目

文章目录 一、需求二、分析三、设计四、编码4.1 商品服务4.2 订单服务4.3 分布式事务4.4 订单超时 商品、购物车 商品服务&#xff1a; 1.全品类购物平台 SPU:Standard Product Unit 标准化产品单元。是商品信息聚合的最小单位。是一组可复用、易检索的标准化信息的集合&#x…

求两个向量之间的夹角

求两个向量之间的夹角 介绍Unity的API求向量夹角Vector3.AngleVector3.SignedAngle 自定义获取方法0-360度的夹角 总结 介绍 求两个向量之间的夹角方法有很多&#xff0c;比如说Unity中的Vector3.Angle&#xff0c;Vector3.SignedAngle等方法&#xff0c;具体在什么情况下使用…

4_透镜畸变

理论上讲&#xff0c;是可能定义一种透镜而不引入任何畸变的。然而现实世界没有完美的透镜。这主要是制造上的原因&#xff0c;因为制作一个“球形”透镜比制作一个数学上理想的透镜更容易。而且从机械方面也很难把透镜和成像仪保持平行。下面主要描述两种主要的透镜畸变并为他…

Python之No module named xxx类问题解决思路(三十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Java集合基础梳理(集合体系+ArrayList)

目录 Java集合体系 为什么要使用集合类 ? 如何选用集合? 哪些集合类是线程安全的&#xff1f;哪些不安全&#xff1f; 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么&#xff1f; 遍历的同时修改一个List有几种方式 ArrayList 如何进行元素的遍历操作&#x…

【办公类-21-05】20240227单个word按“段落数”拆分多个Word(成果汇编 只有段落文字 1拆5)

作品展示 背景需求 前文对一套带有段落文字和表格的word进行13份拆分 【办公类-21-04】20240227单个word按“段落数”拆分多个Word&#xff08;三级育婴师操作参考题目1拆13份&#xff09;-CSDN博客文章浏览阅读293次&#xff0c;点赞8次&#xff0c;收藏3次。【办公类-21-04…