python-docx如何删除所有bookmarks

 更新时间:2024年09月13日 15:32:59   作者:skyrim_H  
在Python-docx库中,虽然没有直接删除书签的功能,但可以通过操作XML元素,遍历文档结构并删除指定元素来实现删除所有书签的目的,首先要明白书签在XML文件中的位置,然后利用Python-docx提供的element元素遍历并删除特定的书签元素

python-docx删除所有bookmarks

由于当时生成文档过于潦草,我想把当时的docx文档中的所有bookmark全部删除,然后重新生成。

原理

在这里依然使用branch为bookmark的python-docx作为基础库,找遍整个库,发现并没有删除指定元素的功能,只有清空所有内容的clear_content的函数。

但是这个函数太过粗暴,不符合我们的要求。于是我自己想了一个删除bookmark的方法。

在python-docx中提供了许多功能,类似于clear_content函数的实现原理。

我的思路

  • 我们首先要知道bookmark位于哪些标签下面,(docx文档的主要成分是一个xml文件,可以用.zip打开查看),此时,我们发现部分bookmark被挂在了body下面,部分bookmark被挂在了paragraph下面。
  • 经过搜索,我们docx类中有一个element元素,该元素可以表示整个用于构造xml的docx类,docx.element包含body元素,body包含paragraph、bookmark等等元素
  • 于是,我们可以参照clear_content,使用for ... in ...的方法遍历元素,再通过if判断element类型,删除指定element

代码

def DeleteAllBookmark(d):
    for element in d.element.body:
        if (element.__class__.__name__ == 'CT_Bookmark') or (element.__class__.__name__ == 'CT_MarkupRange'):
            d.element.body.remove(element)
            print(element.id)
        else:
            for ele in element:
                if (ele.__class__.__name__ == 'CT_Bookmark') or (ele.__class__.__name__ == 'CT_MarkupRange'):
                    element.remove(ele)

该函数能够直接使用

总结

其实python-docx这个库本身功能不太完善,但是,其实它提供了很多对xml的操作模板,可供各位二次开发,只是目前我对于这个库还是不太熟悉,想实现自己的一些想法还是有点困难。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Django INSTALLED_APPS配置使用

    Django INSTALLED_APPS配置使用

    在Django里INSTALLED_APPS是settings.py文件中的一个关键配置项,本文主要介绍了Django INSTALLED_APPS配置,感兴趣的可以了解一下
    2025-07-07
  • 在Python中使用Neo4j数据库的教程

    在Python中使用Neo4j数据库的教程

    这篇文章主要介绍了在Python中使用Neo4j数据库的教程,Neo4j是一个具有一定人气的非关系型的数据库,需要的朋友可以参考下
    2015-04-04
  • Matlab读取excel并利用拉依达准则筛选数据的全过程

    Matlab读取excel并利用拉依达准则筛选数据的全过程

    在Excel中录入好数据以后经常需要被matlab读取,具体该如何读取并进行筛选呢?下面这篇文章就来给大家介绍了关于Matlab读取excel并利用拉依达准则筛选数据的相关资料,需要的朋友可以参考下
    2021-08-08
  • Python安装OpenCV库超时失败解决

    Python安装OpenCV库超时失败解决

    使用pip installopencv-python安装时,安装速度很慢,本文主要介绍了Python安装OpenCV库超时失败,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • python实现简单socket程序在两台电脑之间传输消息的方法

    python实现简单socket程序在两台电脑之间传输消息的方法

    这篇文章主要介绍了python实现简单socket程序在两台电脑之间传输消息的方法,涉及Python操作socket的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python数据类型转换汇总

    Python数据类型转换汇总

    这篇文章主要给大家分享的是Python数据类型转换汇总,int,float相互转换、int,string相互转换、float,string相互转换、string,list相互转换等常见内容,需要的小伙伴可以参考一下
    2022-03-03
  • Python中给字典排序的七种方法详解

    Python中给字典排序的七种方法详解

    我们经常在计算机等级考试中遇到词频排序的问题,我们一般先通过生成字典的方法,统计词的频次,然后给字典排序,那么如何快速地给字典按照键值进行排序呢?本文给大家介绍了Python中给字典排序的七种方法,需要的朋友可以参考下
    2025-07-07
  • 使用Python导出Excel图表以及导出为图片的方法

    使用Python导出Excel图表以及导出为图片的方法

    这篇文章主要介绍了使用Python导出Excel图表以及导出为图片的方法,Python相关模块在Windows下操作office非常方便,需要的朋友可以参考下
    2015-11-11
  • 基于Python实现一个Word表格合并单元格工具

    基于Python实现一个Word表格合并单元格工具

    这篇文章主要介绍了如何基于Python实现一个Word表格合并单元格工具,用于处理Word文档中的表格,主要功能是合并指定列中内容相同的单元格,并支持多种格式设置选项,需要的朋友可以参考下
    2025-11-11
  • python 生成正态分布数据,并绘图和解析

    python 生成正态分布数据,并绘图和解析

    这篇文章主要介绍了python 生成正态分布数据,并绘图和解析,帮助大家更好的利用python进行数据分析,感兴趣的朋友可以了解下
    2020-12-12

最新评论