經常寫文章的小白們會遇到這樣的問題,知道想表達的意思,想出了大概描述的詞匯,但就是缺乏完整漂亮的句子,也許曾經在某個地方看到過,但是找不到了。另外一種情況,閱讀了大量的報告,用的時候想到了其中的某個結論或者數據,想要追根溯源卻有點難。可惜word軟件不提供在一堆文件里查找的功能,也沒有類似於正則表達式的檢索方法,只好自力更生來實現了。
python大法好。
依賴的包:python-docx
安裝:pip install python-docx
引用:import docx
.docx文件的結構比較復雜,分為三層,1、Docment對象表示整個文檔;2、Docment包含了Paragraph對象的列表,Paragraph對象用來表示文檔中的段落;3、一個Paragraph對象包含Run對象的列表,用下面這個圖說明Run到底是神馬東西。
Word里面的文本不只是包含了字符串,還有字號、字體、顏色等等屬性,都包含在style中。一個Run對象就是style相同的一段文本,新建一個Run就有新的style。
下面是一些簡單的演示:
1 >>> import docx 2 >>> doc = docx.Document('D:\project\python\searchdocx\demo.docx') 3 >>> doc 4 <docx.document.Document object at 0x0000000003277B40> 5 >>> len(doc.paragraphs) 6 7 7 >>> doc.paragraphs[0].text 8 u'Document Title' 9 >>> doc.paragraphs[1].text 10 u'A plain paragraph with some bold and some italic' 11 >>> len(doc.paragraphs[1].runs) 12 5 13 >>> doc.paragraphs[1].runs[0] 14 <docx.text.run.Run object at 0x00000000032C8710> 15 >>> doc.paragraphs[1].runs[0].text 16 'A plain paragraph with' 17 >>> doc.paragraphs[2].runs[0].text 18 'Heading, level 1' 19 >>> doc.paragraphs[1].runs[1].text 20 ' some ' 21 >>>
當然,也可以寫一個簡單的方法,讀取文檔中的所有文字,不管格式。
1 import docx 2 3 def readDocx(docName): 4 fullText = [] 5 doc = docx.Document(docName) 6 paras = doc.paragraphs 7 for p in paras: 8 fullText.append(p.text) 9 return '\n'.join(fullText)