python 解析docx文檔的方法,以及利用Python從docx文檔提取插入的文本對象和圖片


首先安裝docx模塊,通過pip install docx或者在docx官方鏈接上下載安裝都可以

下面來看下如何解析docx文檔:文檔格式如下

有3個部分組成 1 正文:text文檔 2 一個表格。 3一個插入的文件對象。4 一個圖片 這4個部分是我們在docx文檔中最常見的幾種格式。解析代碼如下

import docx

def docx_try():
    doc=docx.Document(r'E:\py_prj\test.docx')
    for p in doc.paragraphs:
        print p.text
    for t in doc.tables:
        for r in t.rows:
            for c in r.cells:
                print c.text

E:\python2.7.11\python.exe E:/py_prj/test3.py

Test文檔

名稱

作用

Python

解析數據

C語言

調用底層接口

HTML

網頁數據

首先是用docx.Document打開對應的文件目錄。docx文件的結構比較復雜,分為三層,1、Docment對象表示整個文檔;2、Docment包含了Paragraph對象的列表,Paragraph對象用來表示文檔中的段落;3、一個Paragraph對象包含Run對象的列表。 因此p.text會打印出整個的文本文檔。而用doc.tables來遍歷所有的表格。並且對每個表格通過遍歷行,列的方式來得到所有的內容。

但是在運行結果中並沒有找到我們插入的文件對象和圖片,text.txt文檔。這部分該如何解析呢。首先我們需要先來認識下docx文檔的格式組成:

docx是Microsoft Office2007之后版本使用的,用新的基於XML的壓縮文件格式取代了其目前專有的默認文件格式,在傳統的文件名擴展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。

docx格式的文件本質上是一個ZIP文件。將一個docx文件的后綴改為ZIP后是可以用解壓工具打開或是解壓的。事實上,Word2007的基本文件就是ZIP格式的,他可以算作是docx文件的容器。

docx 格式文件的主要內容是保存為XML格式的,但文件並非直接保存於磁盤。它是保存在一個ZIP文件中,然后取擴展名為docx。將.docx 格式的文件后綴改為ZIP后解壓, 可以看到解壓出來的文件夾中有word這樣一個文件夾,它包含了Word文檔的大部分內容。而其中的document.xml文件則包含了文檔的主要文本內容

 

從上面的文檔我們可以了解到docx文檔實際上是由XML文檔打包組成的。那么我們要得到其中所有的部分,可以用ZIP解壓的方式來得到所有的部件。我們先試下看是否可以

1 將docx文檔改成ZIP的后綴

2 解壓文件

解壓之后得到如下幾個文件

點開word文件夾:有如下的文件夾。document.xml就是描述文本對象的文件

其中embeddings文件中就是我們插入的文本對象text.txt. 是一個bin文件

Media文件中就是存儲的圖片:

我們通過手動的方式將插入的文本以及圖片解析出來,那么通過代碼也是同樣可以解析的。代碼如下。

os.chdir(r'E:\py_prj')  #首先改變目錄到文件的目錄
os.rename('test.docx','test.ZIP')  # 重命名為zip文件
f=zipfile.ZipFile('test.zip','r')  #進行解壓
for file in f.namelist():
    f.extract(file)
file=open(r'E:\py_prj\word\embeddings\oleObject1.bin','rb').read() #進入文件路徑,讀取二進制文件。
for f in file:
    print f


通過上面的方式,就可以將docx中插入的文件以及圖片全部解析出來。具體docx的寫的方式可以參考官方文檔的介紹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM