一.docx模塊
Python可以利用python-docx模塊處理word檔案,處理方式是面向物件的,也就是說python-docx模塊會把word檔案,檔案中的段落、文本、字體等都看做物件,對物件進行處理就是對word檔案的內容處理,
二.相關概念
如果需要讀取word檔案中的文字(一般來說,程式也只需要認識word檔案中的文字資訊),需要先了解python-docx模塊的幾個概念,
- Document物件,表示一個word檔案,
- Paragraph物件,表示word檔案中的一個段落
- Paragraph物件的text屬性,表示段落中的文本內容,
三.模塊的安裝和匯入
需要注意,python-docx模塊安裝需要在cmd命令列中輸入pip install python-docx,如下圖表示安裝成功(最后那句英文Successfully installed,成功地安裝完成)
注意在匯入模塊時,用的是import docx,
也真是奇了怪了,怎么安裝和匯入模塊時,很多都不用一個名字,看來是很有必要出一個python版本的模塊管理程式python-maven了,本段純屬PS,
四.讀取word文本
在了解了上面的資訊之后,就很簡單了,下面先創建一個D:\temp\word.docx檔案,并在其中輸入如下內容,
import docx
file=docx.Document(r"F:\python從入門到放棄\7\2\wenjian.docx")
print('段落:'+str(len(file.paragraphs)))
#
# for para in file.paragraphs:
# print(para.text)
for i in range(len(file.paragraphs)):
print("第"+str(i)+"段的內容是:"+file.paragraphs[i].text)
import sys
from docx import Document
from docx.shared import Inches
def main():
# reload(sys)
# sys.setdefaultencoding('utf-8')
# 創建檔案物件
document = Document()
# 設定檔案標題,中文要用unicode字串
document.add_heading(u'我的一個新檔案',0)
# 往檔案中添加段落
p = document.add_paragraph('This is a paragraph having some ')
p.add_run('bold ').bold = True
p.add_run('and some ')
p.add_run('italic.').italic = True
# 添加一級標題
document.add_heading(u'一級標題, level = 1',level = 1)
document.add_paragraph('Intense quote',style = 'IntenseQuote')
# 添加無序串列
document.add_paragraph('first item in unordered list',style = 'ListBullet')
# 添加有序串列
document.add_paragraph('first item in ordered list',style = 'ListNumber')
document.add_paragraph('second item in ordered list',style = 'ListNumber')
document.add_paragraph('third item in ordered list',style = 'ListNumber')
# 添加圖片,并指定寬度
document.add_picture('cat.png',width = Inches(2.25))
# 添加表格: 1行3列
table = document.add_table(rows = 1,cols = 3)
# 獲取第一行的單元格串列物件
hdr_cells = table.rows[0].cells
# 為每一個單元格賦值
# 注:值都要為字串型別
hdr_cells[0].text = 'Name'
hdr_cells[1].text = 'Age'
hdr_cells[2].text = 'Tel'
# 為表格添加一行
new_cells = table.add_row().cells
new_cells[0].text = 'Tom'
new_cells[1].text = '19'
new_cells[2].text = '12345678'
# 添加分頁符
document.add_page_break()
# 往新的一頁中添加段落
p = document.add_paragraph('This is a paragraph in new page.')
# 保存檔案
document.save('demo1.doc')
if __name__ == '__main__':
main()
讀取表格:
import docx
doc = docx.Document('wenjian.docx')
for table in doc.tables: # 遍歷所有表格
print('----table------')
for row in table.rows: # 遍歷表格的所有行
# row_str = '\t'.join([cell.text for cell in row.cells]) # 一行資料
# print row_str
for cell in row.cells:
print(cell.text, '\t',)
print() #換行
首先是用docx.Document打開對應的檔案目錄,
docx檔案的結構比較復雜,分為三層,
- Docment物件表示整個檔案;
- Docment包含了Paragraph物件的串列,Paragraph物件用來表示檔案中的段落;
- 一個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的寫的方式可以參考官方檔案的介紹
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541186.html
標籤:其他
上一篇:python3實作字串的全排列的方法(無重復字符)兩種解決方法
下一篇:FPGA:乒乓球比賽模擬機的設計
