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

news2025/1/22 12:52:39

作品展示

背景需求:

最近学育婴师,老师发了一套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.coloradmin.cn/o/1474917.html

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

相关文章

Firefox Focus,一个 “专注“ 的浏览器

近期才开始使用 Firefox Focus&#xff0c;虽然使用频率其实并不高&#xff0c;基本上只有想到了才去用&#xff0c;但每次使用的体验都很不错。 Firefox Focus 这款浏览器大约在 2015 年首次发布&#xff0c;不同于一般版本的 Firefox&#xff0c;它主打“自动删除浏览记录”…

【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection

sqli-labs-master 1-20 BASIC-Injection 文章目录 sqli-labs-master 1-20 BASIC-Injection第一关-报错注入第二关-报错注入第三关-报错注入第四关-报错注入第五关-报错注入-双查询注入第六关-报错注入-双查询注入第七关-outfile写入webshell第八关-布尔盲注第九关-时间盲注第十…

Mendix 10.7 发布- Go Mac It!

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

用这款APP,世界听你的!

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

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

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

Python 实现Excel自动化办公(上)

在Python 中你要针对某个对象进行操作&#xff0c;是需要安装与其对应的第三方库的&#xff0c;这里对于Excel 也不例外&#xff0c;它也有对应的第三方库&#xff0c;即xlrd 库。 什么是xlrd库 Python 操作Excel 主要用到xlrd和xlwt这两个库&#xff0c;即xlrd是读Excel &am…

阿里云中小企业扶持权益,助力企业开启智能时代创业新范式

在数字化浪潮的推动下&#xff0c;中小企业正面临着转型升级的重要关口。阿里云深知中小企业的挑战与机遇&#xff0c;特别推出了一系列中小企业扶持权益&#xff0c;旨在帮助企业以更低的成本、更高的效率拥抱云计算&#xff0c;开启智能时代创业的新范式。 一、企业上云权益…

JDK安装及环境变量配置(保姆级教程)

什么是JDK&#xff1f; JDK&#xff08;Java Development Kit&#xff09;是Java开发工具包的缩写 它是Java开发人员必备的软件包之一。JDK包含了用于编译、调试和运行Java程序的各种工具和库。通过安装JDK&#xff0c;开发人员可以开始编写、编译和运行Java应用程序、Applet和…

RK3568平台 RTC时间框架

一.RTC时间框架概述 RTC&#xff08;Real Time Clock&#xff09;是一种用于计时的模块&#xff0c;可以是再soc内部&#xff0c;也可以是外部模块。对于soc内部的RTC&#xff0c;只需要读取寄存器即可&#xff0c;对于外部模块的RTC&#xff0c;一般需要使用到I2C接口进行读取…

【OnlyOffice】 桌面应用编辑器,版本8.0已发布,PDF表单、RTL支持、Moodle集成、本地界面主题

ONLYOFFICE桌面编辑器v8.0是一款功能强大、易于使用的办公软件&#xff0c;适用于个人用户、企业团队和教育机构&#xff0c;帮助他们高效地处理文档工作并实现协作。无论是在Windows、macOS还是Linux平台上&#xff0c;ONLYOFFICE都能提供无缝的编辑和共享体验。 目录 ONLYOFF…

素皮材质的手机壳,如何才能做到经久耐用?

近几年&#xff0c;素皮材质开始在手机背壳上开始应用&#xff0c;各家手机厂商&#xff0c;基本都给自己的旗舰系列设备推出了带素皮材质版本的手机款式&#xff0c;比如华为的Mate 60系列&#xff0c;不仅Pro版本有素皮材质&#xff0c;Pro版本更是黑白两款全是素皮材质。 那…

Linux线程(二)----- 线程控制

目录 前言 一、线程资源区 1.1 线程私有资源 1.2 线程共享资源 1.3 原生线程库 二、线程控制接口 2.1 线程创建 2.1.1 创建一批线程 2.2 线程等待 2.3 终止线程 2.4 线程实战 2.5 其他接口 2.5.1 关闭线程 2.5.2 获取线程ID 2.5.3 线程分离 三、深入理解线程 …

UE5 C++ 单播 多播代理 动态多播代理

一. 代理机制&#xff0c;代理也叫做委托&#xff0c;其作用就是提供一种消息机制。 发送方 &#xff0c;接收方 分别叫做 触发点和执行点。就是软件中的观察者模式的原理。 创建一个C Actor作为练习 二.单播代理 创建一个C Actor MyDeligateActor作为练习 在MyDeligateAc…

wayland(xdg_wm_base) + egl + opengles 使用 Assimp 加载3D model 最简实例(十三)

文章目录 前言一、3D model 文件介绍1. 3d model 介绍1.1 如何获取3d model 文件1.2 3d model 的文件格式1.3 obj模型数据格式2. 3d 立方体 model 实例——cube.obj二、Assimp 介绍1. Assimp 简介2.ubuntu 上安装libassimp3. 使用Assimp 解析 cube.obj 文件3.1 assimp_load_cub…

括号生成(力扣题目22)

题目描述&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()&q…

docker 容器修改端口

一般在运行容器时&#xff0c;我们都会通过参数 -p&#xff08;使用大写的-P参数则会随机选择宿主机的一个端口进行映射&#xff09;来指定宿主机和容器端口的映射&#xff0c;例如 docker run -it -d --name [container-name] -p 8088:80 [image-name]这里是将容器内的80端口…

Adobe illustrator CEP插件调试

1.创建插件CEP面板&#xff0c;可以参考&#xff1a;http://blog.nullice.com/%E6%8A%80%E6%9C%AF/CEP-%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B/%E6%8A%80%E6%9C%AF-CEP-%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B-Adobe-CEP-%E6%89%A9%E5%B1%95%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8…

flutter 加密安全

前言&#xff1a;数据安全 数据的加密解密操作在 日常网络交互中经常会用到&#xff0c;现在密码的安全主要在于 秘钥的安全&#xff0c;如论 DES 3DES AES 还是 RSA, 秘钥的算法&#xff08;计算秘钥不固定&#xff09; 和 保存&#xff0c;都决定了你的数据安全&#xff1b;…

免费的Git图形界面工具sourceTree介绍

阅读本文同时请参阅-----代码库管理工具Git介绍 sourceTree是一款免费的Git图形界面工具&#xff0c;它简化了Git的使用过程&#xff0c;使得开发者可以更加方便地下载代码、更新代码、提交代码和处理冲突。下面我将详细介绍如何使用sourceTree进行这些操作。 1.下载和…

ABAP - Function ALV 09 颜色设置(行、列、单元格)

用户有些需求要求ALV某些数值要用颜色着重的体现出来。ALV 颜色设置有行颜色、列颜色、单元格颜色颜色值的设置:CX(1~7)X(是否加重:1/0)X(是否反色&#xff1a;1/0)&#xff0c;附&#xff1a;颜色代码 设置列颜色&#xff1a;Fieldcat参数emphasize赋值 ** Fieldcat 变量定义 …