python-docx如何刪除所有bookmarks
python-docx刪除所有bookmarks
由于當時生成文檔過于潦草,我想把當時的docx文檔中的所有bookmark全部刪除,然后重新生成。
原理
在這里依然使用branch為bookmark的python-docx作為基礎庫,找遍整個庫,發(fā)現(xiàn)并沒有刪除指定元素的功能,只有清空所有內(nèi)容的clear_content的函數(shù)。
但是這個函數(shù)太過粗暴,不符合我們的要求。于是我自己想了一個刪除bookmark的方法。
在python-docx中提供了許多功能,類似于clear_content函數(shù)的實現(xiàn)原理。
我的思路
- 我們首先要知道bookmark位于哪些標簽下面,(docx文檔的主要成分是一個xml文件,可以用.zip打開查看),此時,我們發(fā)現(xiàn)部分bookmark被掛在了body下面,部分bookmark被掛在了paragraph下面。
- 經(jīng)過搜索,我們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)該函數(shù)能夠直接使用
總結
其實python-docx這個庫本身功能不太完善,但是,其實它提供了很多對xml的操作模板,可供各位二次開發(fā),只是目前我對于這個庫還是不太熟悉,想實現(xiàn)自己的一些想法還是有點困難。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python數(shù)據(jù)解析bs4庫使用BeautifulSoup方法示例
這篇文章主要為大家介紹了Python數(shù)據(jù)解析bs4庫使用BeautifulSoup方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
人工智能學習Pytorch張量數(shù)據(jù)類型示例詳解
這篇文章主要為大家介紹了人工智能學習Pytorch張量數(shù)據(jù)類型的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11

