【办公类-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._element
        p.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))
# 13

h=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 += num
    o.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,os
 
print('----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._element
        p.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))
# 13

h=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 += num
    o.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://www.mfbz.cn/a/414078.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读:SOLOv2: Dynamic, Faster and Stronger

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址&#xff1a;[2003.10152] SOLOv2: Dynamic and Fast Instance Segmentation (arxiv.org) 代码地址&#xff1a;GitHub - WXinlong/SOLO: SOLO and SOLOv2 for instance segmentation, ECCV 2020 & NeurIPS…

逆变器专题(10)-电流环控制参数设计

相应仿真原件请移步资源下载 对跟网型逆变器来说&#xff0c;电流环的PI参数设计尤其重要 如上图所示为电流环解耦控制模型 而电压、电流采样和计算都是在开关周期的中间时刻进行&#xff0c;SVPWM调制出的磁矢量需要在一个开关周期进行作用&#xff0c;因此&#xff0c;整个逆…

2024年腾讯云4核8G12M配置的轻量服务器同时支持多大访问量?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

swagger-ui.html报错404,解决办法

swagger-ui.html报错404,解决办法&#xff01;现在后端开发项目中&#xff0c;为了节省时间&#xff0c;使用swagger插件&#xff0c;可以方便的快捷生成接口文档。但是如果你在请求前端页面路径比如&#xff1a;http://127.0.0.1:7777/swagger-ui.html。找不到。那是因为你的配…

Nginx网络服务六-----IP透传、调度算法和负载均衡

1.实现反向代理客户端 IP 透传 就是在日志里面加上一个变量 Module ngx_http_proxy_module [rootcentos8 ~]# cat /apps/nginx/conf/conf.d/pc.conf server { listen 80; server_name www.kgc.org; location / { index index.html index.php; root /data/nginx/html/p…

unity shaderGraph实例-物体线框显示

文章目录 本项目基于URP实现一&#xff0c;读取UV网格&#xff0c;由自定义shader实现效果优缺点效果展示模型准备整体结构各区域内容区域1区域2区域3区域4shader属性颜色属性材质属性后处理 实现二&#xff0c;直接使用纹理&#xff0c;使用默认shader实现优缺点贴图准备材质准…

振弦采集仪在高速公路岩土工程中的监测与评估

振弦采集仪在高速公路岩土工程中的监测与评估 河北稳控科技振弦采集仪是一种常用于结构振动监测的仪器&#xff0c;可以用于高速公路岩土工程中的监测与评估。它的原理是通过测量结构振动引起的振弦的变形来反映结构的振动情况。 在高速公路岩土工程中&#xff0c;振弦采集仪可…

【主题广范|见刊快】2024年电力电气与机械,能源工程国际会议(ICPEMEE 2024)

【主题广范|见刊快】2024年电力电气与机械&#xff0c;能源工程国际会议&#xff08;ICPEMEE 2024&#xff09; 重要信息 会议官网&#xff1a;http://www.icpemee.com会议地址&#xff1a;合肥截稿日期&#xff1a;2024.03.10召开日期&#xff1a;2024.03.20 &#xff08;先投…

图论基础(一)

一、图论 图论是数学的一个分支&#xff0c;它以图为研究对象。图论中的图是若干给定的点&#xff08;顶点&#xff09;以及连接两点的线&#xff08;边&#xff09;构成的图像&#xff0c;这种图形通常用来描述某些事物之间的某种特定关系&#xff0c;用点代表事物&#xff0c…

Springboot+vue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的考务报名平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的考务报名平台&#xff0c;采用M&#xff08;model&#xff0…

【机器人最短路径规划问题(栅格地图)】基于遗传算法求解

基于遗传算法求解机器人最短路径规划问题&#xff08;栅格地图&#xff09;的仿真结果 仿真结果&#xff1a; 路径长度的变化曲线&#xff1a; 遗传算法优化后的机器人避障路径&#xff1a;

Leetcode 134. 加油站 java版 如何解决环路加油站算法

# 官网链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 1. 问题描述&#xff1a; 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升…

Eclipse是如何创建web project项目的?

前面几篇描述先后描述了tomcat的目录结构和访问机制&#xff0c;以及Eclipse的项目类型和怎么调用jar包&#xff0c;还有java的main函数等&#xff0c;这些是一些基础问题&#xff0c;基础高清出来才更容易搞清楚后面要说的东西&#xff0c;也就是需求带动学习&#xff0c;后面…

Mendix 10.7 发布- Go Mac It!

在我们上个月发布了硕果累累的 Mendix 10.6 MTS 之后&#xff0c;您是否还没有抚平激动的情绪&#xff1f;好吧&#xff0c;不管您是否已经准备好&#xff0c;本月将带来另一个您想知道的大亮点——Mac版Studio Pro&#xff01;但这还不是全部。本月&#xff0c;我们还将推出Re…

自动驾驶框架:自动驾驶汽车定位-感知-规划-决策-控制概述,按照我的架构图理解:决策决定的是速度,规划决定的是路径(架构理解推荐)

1.按照我的架构图理解&#xff1a;决策决定的是速度&#xff0c;规划决定的是路径 参考链接&#xff1a;【自动驾驶】运动规划丨速度规划丨自动驾驶速度规划及状态协调方法 2.下面是参考别人的理解&#xff1a; 自动驾驶汽车定位-感知-规划-决策-控制概述 规划-决策-控制知…

Window10安装ruby

最好的方法&#xff0c;使用rubyinstaller&#xff0c;即在Downloads。 这是官方推荐的安装方式 通常来说我们会下载64位的 下载完后执行下载的exe即可。在最后一步会提示让安装gem&#xff0c;选则安装即可。 然后就可以在控制台进行测试了。

【推荐算法系列十六】:协同过滤

文章目录 参考原理基于邻域的协同过滤算法基于用户的协同过滤&#xff08;User-Based Collaborative Filtering&#xff09;基于内容的协同过滤 基于模型的协同过滤算法 扩展优缺点 参考 推荐系统之神经协同过滤 原理 基于邻域的协同过滤算法 基于邻域的协同过滤算法又包括…

雾锁王国服务器怎么建?雾锁王国服务器搭建方法

雾锁王国Enshrouded服务器搭建怎么搭建&#xff1f;非常简单&#xff0c;阿里云计算巢雾锁王国程序&#xff0c;可以一键搭建雾锁王国多人联机服务器&#xff0c;腾讯云是基于雾锁王国镜像系统&#xff0c;阿里云服务网aliyunfuwuqi.com汇总雾锁王国服务器搭建&#xff0c;超简…

【学习总结】什么是弹性负载均衡? LB和ELB的区别

[Q&A] 什么是 LB (Load Balancer) 负载均衡器&#xff1a; 这是一个广泛的概念&#xff0c;泛指任何用于在网络流量进入时进行分配以实现服务器集群间负载均衡的设备或服务。传统的负载均衡器可以是硬件设备&#xff0c;也可以是软件解决方案&#xff0c;其基本目标是将客…

常见的主流媒体有哪些?主流媒体报道的优势

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体胡老师。 主流媒体通常指的是具有广泛影响力和权威性的媒体机构&#xff0c;它们在新闻报道、舆论引导等方面扮演着重要角色。 常见的主流媒体包括但不限于&#xff1a; 电视媒体&#xff1a;如总台…
最新文章