Ⅰ 利用python將docx文件轉為txt
背景:工作中需要將文件夾下的若干word文.docx轉換為對應txt文本格式
因此需要將docx中文本讀取出來,然後保存為txt格式即可
需要的python模廳伏塊為 python-docx : https://python-docx.readthedocs.io/en/latest/index.html, 導入模塊時候導入docx
(只能讀取.docx文件,不能讀取.doc文件)
注意,在PyPi里還有一個叫docx的庫,已經停止更新,不建議使用)
http://www.cnblogs.com/geek-arking/p/9300617.html
上面的方法只能讀取docx文件,如果讀取doc會報錯
結果報錯:docx.opc.exceptions.PackageNotFoundError: Package not found。還是無法識別doc
「改變拓展名並沒有改變其編碼方式,因此無法讀取文本內容,需將doc文件用word另存為docx後再用python-docx讀取其內容」
對於要轉換的doc文件,網上的資料都是使用win32,需要安裝 pypiwin32
https://www.cnblogs.com/AlgorithmDot/p/3386918.html
通過上面的方法,有時可以塵陸直接將doc轉換為txt文件,有時候會報錯。
這里我們可以考慮將doc文件直接轉換為docx然後再通過上面的方法讀取為txt,如果手動將doc修改為txt或者docx,打開文件會顯示亂碼,但是可以用其提供的SaveAs方法將.doc文檔利用手動的方式「另存為」.docx文檔,就能夠成功打開轉化後的.docx文檔,
doc.SaveAs(tmp +'.docx', 16)
其中16的含義如下:
利用win32com介面直接調用office API,好處是簡單、兼容性好,只要office能處理的,python都可以處理,處理出來的結果和office word裡面「另存為」一扮兄攜致。
下面是office 2007支持的全部文件格式對應表:
wdFormatDocument = 0
wdFormatDocument97 = 0
wdFormatDocumentDefault = 16
wdFormatDOSText = 4
wdFormatDOSTextLineBreaks = 5
wdFormatEncodedText = 7
wdFormatFilteredHTML = 10
wdFormatFlatXML = 19
wdFormatFlatXMLMacroEnabled = 20
wdFormatFlatXMLTemplate = 21
= 22
wdFormatHTML = 8
wdFormatPDF = 17
wdFormatRTF = 6
wdFormatTemplate = 1
wdFormatTemplate97 = 1
wdFormatText = 2
wdFormatTextLineBreaks = 3
wdFormatUnicodeText = 7
wdFormatWebArchive = 9
wdFormatXML = 11
wdFormatXMLDocument = 12
= 13
wdFormatXMLTemplate = 14
= 15
wdFormatXPS = 18
照著字面意思應該能對應到相應的文件格式。
1、新建或打開文件。這個比較簡單用docx的Document類,若指定路徑則是打開文檔;若沒有指定路徑則是新建文檔
2、保存文件。有打開,就有保存。用Document類的save方法,其中參數是保存的文件路徑,或者要保存的文件流。一般指定路徑即可。
doc.save(path_or_stream)
3、對象集合。python-docx包含了word文檔的相關對象集合。
4、插入段落。段落是word最基本的對象之一。
5、新增樣式。這個幫助文檔裡面說得不仔細,而且還是英文的。我手頭上的項目用到這個,就自己琢磨出怎麼使用,如下。
6、應用字元樣式。字元自然是在段落裡面的,可以採用下面方法給段落追加文字和設置字元樣式。
#插入一個空白段落
p = doc.add_paragraph('')
p.add_run('123', style="Heading 1 Char")
p.add_run('456')
p.add_run('789', style="Heading 2 Char")
#這樣一個段落就應用了兩個字元樣式,中間「456」就沒應用樣式
printp.text#輸出結果是u'123456789' 也還是連續的
7、設置字體。當然可以不用通過設置樣式對某些字進行設置,也可以直接設置。
p = doc.add_paragraph('')
r = p.add_run('123')
r.font.bold =True#加粗
r.font.italic =True#傾斜 等等...
8、表格操作。表格也是經常用到的一種對象類型。
Ⅱ python-docx官方文檔中文
沒有找到。
第一個:
http://python-docx.readthedocs.io/en/latest/api/table.html#id1
和http://python-docx.readthedocs.io/en/latest/api/document.html#id1
有tables返回。
第二個:
用re來解決,\d{4}\D\d{1,2}\D\d{1,2}\D ,這些匹配到的就是日期,替換成你要的。
Ⅲ Python Word文檔處理 上篇:python-docx
某天我收到一個需求:希望能夠用python對word文檔進行一些處理,比如更換一些文字以及添加批註。
簡單搜索後,我發現 python-docx 是一個處理docx文檔的常用python庫,因此我打算用它來進行進一步開發。
官方文檔 提供了一個簡單的示例
python-docx 將文檔抽象為document對象、paragraph對象以及run對象,提供了圍繞這些對象進行簡單處理的API
然而在文檔中並沒有出現關於批註操作的部分,我在搜尋 一些文章 後發現了在某個 issue 中提及了添加批註相關信息,然而還是沒有得到具體的解決辦法
docx文檔底層是由XML文件組成的
我們可以將一個 xx.docx 文件的後綴名改為 .rar 然後將其手動解壓,可以得到下面這些文件
在諸多文件當中主要用到的是 document.xml 文件,這里保存了文檔的內容
打開一份 document.xml 文件,拋開header、footer、table以及其他特殊項,去掉樣式等修飾項,一份樸素的docx文檔主要可以分為三個部分:paragraph、run、text
paragraph即段落,就是我們在word當中看到的一段。text即文本,就是真實的內容。run比較抽象,我們可以將其理解為片段,即語句的切分。
為了更好地理解run是什麼,打開一篇word文檔定位其中一句話
讓我們看看這篇文檔解壓之後的 document.xml 文件中對應的部分
OK,我們可以看到原本完整的一句話在word中被拆分成了許多個 <w:r> 標簽,這就是 run ,word切分 run 的規則很多,有的根據標點符號,有的根據中文分詞,句子中如果存在不同樣式的字詞也會單獨切分出來,因此我們很難預估一句話究竟會被分成幾個片段。
在issue中搜索comment關鍵字發現在一個 merge request 上已經給出了添加批註的解決方案,可以通過 paragraph 對象上的 add_comment 方法給一個段落添加批註
但這還是不符合我的需求,我的目標是精準添加到某個詞或者短語上
打開 這個貢獻者的源碼 進行研究
其實就是在P標簽內插入comment標簽引用,同時添加comment標簽到xx文件
同理我們可以在r標簽內插入comment標簽引用,同時添加comment標簽到xx文件,這樣就能實現給特定詞添加批註的需求了