python-docx如何删除所有bookmarks
目录
- python-docx删除所有bookmarks
- 原理
- 我的思路
- 代码
- 总结
python-docx删除所有bookmarks
由于当时生成文档过于潦草,我想把当时的docpythonx文档中的所有bookmark全部删除,然后重新生成。
原理
在这里依然使用branch为bookmark的python-docx作为基础库,找遍整个库,发现并没有删除指定元素的功能,只有清空所有内容js的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等php等元素
- 于是,我们可以参照
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: php for ele in 编程客栈element: if (ele.__class__.__name__ == 'CT_Bookmark') or (ele.__class__.__name__ == 'CT_MarkupRange'): element.remove(ele)
该函数能够直接使用
总结
其实python-docx这个库本身功能不太完善,但是,其实它提供了很多对xml的操作模板,可供各位二次开发,只是目前我对于这个库还是不太熟悉,想实现自己的一些想法还是有点困难。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论