Python中docx2txt庫的使用說明
docx2txt的Github地址
docx2txt是基於python的從docx文件中提取文本和圖片的庫。
代碼是從python-docx中獲取的。它也可以從頁眉,頁腳和超鏈接中提取文本。它現在也可以提取圖像。
安裝
pip install docx2txt
運行
1、命令行運行
# extract text docx2txt file.docx # extract text and images docx2txt -i /tmp/img_dir file.docx
2、在python中調用
# extract text docx2txt file.docx # extract text and images docx2txt -i /tmp/img_dir file.docx
補充:python docx提取word中的目錄及文本框中的文本
問題描述
python docx提取word中的目錄及文本框中的文本
解決方案
因未在docx庫找到直接識別word中目錄及文本框中文本的方法,所以采用瞭一個“笨”方法,docx庫可以把word文檔解析成xml格式,以解析xml的方式查找目錄及文本框中文本,具體做法:
迭代出文檔的所有element,其中目錄的tag為“std”,找到它後提出他的所有文本即為目錄文本;文本框的tag 為“textbox”,找到它後還要繼續下鉆尋找tag為 ‘r’的element,提取其文本則為文本框中文本。
# 提取word目錄 file = docx.Document(file_path) children = file.element.body.iter() child_iters = [] for child in children: # 通過類型判斷目錄 if child.tag.endswith('main}sdt'): for ci in child.iter(): if ci.text and ci.text.strip(): child_iters.append(ci) catalog = [ci.text for ci in child_iters]
# 提取word文本框中文本 file = docx.Document(file_path) children = file.element.body.iter() child_iters = [] for child in children: # 通過類型判斷目錄 if child.tag.endswith('textbox'): for ci in child.iter(): if ci.tag.endswith('main}r'): child_iters.append(ci) textbox = [ci.text for ci in child_iters]
文本域的標簽,第一次找的是AlternateContent,後來發現對有些文本域失效;第二次又找到瞭pict,基本覆蓋瞭測試的所有文本域;第三次把word文檔的標簽都找出來看瞭一下,發現textbox這個標簽看著更靠譜,用它測試瞭一下,也能覆蓋所有的測試文本域,決定就選擇這個標簽。
提取文本後,又有瞭新需求,提取的文本很多都不成句,呈短語或單詞的形式,需要把提取的文本還原成段落形式:
file = docx.Document(file_path) children = file.element.body.iter() child_iters = [] tags = [] for child in children: # 通過類型判斷目錄 if child.tag.endswith(('AlternateContent','textbox')): for ci in child.iter(): tags.append(ci.tag) if ci.tag.endswith(('main}r', 'main}pPr')): child_iters.append(ci) text = [''] for ci in child_iters : if ci.tag.endswith('main}pPr'): text.append('') else: text[-1] += ci.text ci.text = '' trans_text = ['***'+t+'***' for t in text] print(trans_text) i, k = 0, 0 for ci in child_iters : if ci.tag.endswith('main}pPr'): i += 1 k = 0 elif k == 0: ci.text = trans_text[i] k = 1 file.save('E:/***/test.docx')
把標簽pPr當做換行標志, 把提取的文本每段前後都加瞭“***”後又寫回文檔中。
註:這裡又發現AlternateContent這個標簽必須要帶上,否則可以提取文本域內的文字,但改變文字寫回去保存word不顯示更改後的文字。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- Python辦公自動化從Excel中計算整理數據並寫入Word
- Python快速優雅的批量修改Word文檔樣式
- Python八個自動化辦公的技巧
- Python實現Word文檔轉換Markdown的示例
- python 實現docx與doc文件的互相轉換