前言:
前兩篇博客介紹了 Python 的 docx 模塊對 Word 檔案的寫操作,這篇博客將介紹如何用 docx 模塊讀取已有 Word 檔案中的資訊,
本篇博客主要內容有:
1、獲取檔案的章節資訊;
2、獲取段落文本資訊;
3、獲取表格內文本資訊;
4、獲取檔案內格式資訊,
1、獲取檔案章節資訊:
1、用docx模塊獲取已有的word檔案物件:
from docx import Document
# Document 類,不僅可以新建word檔案,也可以打開一個本地檔案
doc = Document('test03.docx') # 想獲取的檔案檔案名,這里是相對路徑,
用做示例的 test03.docx 檔案截圖如下:

檔案中有兩個章節共兩頁(一個章節一頁),一個章節的頁面為 A3 ,另一個為 A4,
2、獲取檔案章節資訊:
# 獲取檔案所有章節
sections = doc.sections
"class Sections(Sequence):"
print(sections)
# <docx.section.Sections object at 0x000000000B2E1148>
# 查看章節數量
print(len(sections)) # 2
注意:
章節物件的概念雖然比段落物件大,章節物件可以設定本章節的頁面大小頁眉頁腳等,在該章節的段落物件必須遵守該章節的設定,
但是又并不存在包含關系,也就是說不能通過章節物件獲取到段落資訊,
3、獲取頁邊距等資訊:
# 獲取章節物件的頁邊距等資訊
sec0 = sections[0]
"class Section(object):"
'''
官方解釋:檔案節,提供對節和頁面設定的訪問,
還提供對頁眉和頁腳的訪問,
'''
print(sec0)
# <docx.section.Section object at 0x000000000B2D5708>
# 獲取章節頁面資訊
# 獲取頁面邊距值:(單位為像素)
print('左邊距:',sec0.left_margin)
# 左邊距: 914400
print('右邊距:',sec0.right_margin)
# 右邊距: 914400
print('上邊距:',sec0.top_margin)
# 上邊距: 1143000
print('下邊距:',sec0.bottom_margin)
# 下邊距: 1143000
print('頁眉邊距:',sec0.header_distance)
# 頁眉邊距: 540385
print('頁腳邊距:',sec0.footer_distance)
# 頁腳邊距: 629920
print('頁面方向:',sec0.orientation)
# 頁面方向: LANDSCAPE (1)
print('頁面高度:',sec0.page_height)
# 頁面高度: 10657205
print('頁面寬度:',sec0.page_width)
# 頁面寬度: 15085695
這里獲取的是第一個章節的頁面資訊,也就是 A3 頁面的資訊,
注:上一篇博客 往Word檔案中插入圖片、表格,設定表格樣式,章節,頁眉頁腳等,在介紹設定頁面資訊時,忘記介紹如何設定頁面方向了,這里補充一下:
設定頁面方向:
# 匯入設定頁面方向所需模塊
from docx.enum.section import WD_ORIENT
# 獲取章節物件
section = document.sections[0]
# 設定頁面方向
section.orientation = WD_ORIENT.LANDSCAPE # 橫向
可設定項有橫向( LANDSCAPE ) 和縱向 ( PORTRAIT ):
'''
'PORTRAIT', 0, 'portrait', 'Portrait orientation.'
'LANDSCAPE', 1, 'landscape', 'Landscape orientation.'
'''
檔案截圖:

4、獲取檔案頁眉頁腳資訊:
head0 = sec0.header # 獲取頁眉物件
print(head0)
# <docx.section._Header object at 0x000000000B2E1348>
head0_pars = head0.paragraphs # 獲取 頁眉 paragraphs
# 獲取頁眉文字資訊
# 因存在多個 paragraph 物件的可能所以用回圈讀取的方式
head0_string = ''
for par in head0_pars:
head0_string += par.text
print(head0_string)
# 儀征市馬集鎮總體規劃(2017-2030)——說明
# 獲取頁腳資訊,也是類似的方法
foot0 = sec0.footer
print(foot0) # 獲取頁腳物件
# <docx.section._Footer object at 0x000000000B2E3808>
foot0_pars = foot0.paragraphs
foot0_string = ''
for par in foot0_pars:
foot0_string += par.text
print(foot0_string)
# 1
2、獲取段落文字資訊:
1、獲取Word檔案所有段落物件:
"獲取檔案所有段落資訊:"
# 獲取檔案所有段落物件
paragraphs = doc.paragraphs
注意:
paragraphs 獲取的是檔案中所有段落物件的串列,嚴格來說是word檔案中正文部分的段落物件串列,因為通過前文的介紹,許多除正文部分,如 表格,頁面頁腳等元素也包含 paragraph 物件,
而 doc.paragraphs 獲取到的 paragraph 不包含這些段落物件,
2、獲取段落物件文字資訊:
print(paragraphs)
print(len(paragraphs)) # 列印結果:20
# 獲取一個段落物件的文字資訊
par0 = paragraphs[0]
print(par0)
par0_string = par0.text
print(par0_string)
# 獲取所有段落文字資訊
pars_string = [par.text for par in paragraphs]
print(pars_string)
par0_string 列印截圖:

3、獲取段落格式資訊:
print('段落對齊方式:',par0.paragraph_format.alignment) # 段落對齊方式: LEFT (0) print('左縮進:',par0.paragraph_format.left_indent) # 左縮進: None print('右縮進:',par0.paragraph_format.right_indent) # 右縮進: None print('首行縮進:',par0.paragraph_format.first_line_indent) # 首行縮進: 304800 print('行間距:',par0.paragraph_format.line_spacing) # 行間距: 1.5 print('段前間距:',par0.paragraph_format.space_before) # 段前間距: 198120 print('段后間距:',par0.paragraph_format.space_after) # 段后間距: 198120LIK1
3、獲取文字格式資訊:
paragraph 物件 里還有更小的 run 物件,run 物件才包含了段落物件的文字資訊,
paragraph.text 方法也是通過 run 物件的方法獲取到文字資訊的:
paragraph.text 方法原始碼:
def text(self):
text = ''
for run in self.runs:
text += run.text
return text
文字的字體、大小、下劃線等資訊都包含在 run 物件中(不清楚的看前面的博客):
# 獲取段落的 run 物件串列
runs = par0.runs
print(runs)
# 獲取 run 物件
run_0 = runs[0]
print(run_0.text) # 獲取 run 物件文字資訊
# 列印結果:
# 堅持因地制宜,差異化打造特色小鎮,
檔案 段落 和 run 物件示意:

獲取文字格式資訊:
# 獲取文字格式資訊 print('字體名稱:',run_0.font.name) # 字體名稱: 宋體 print('字體大小:',run_0.font.size) # 字體大小: 152400 print('是否加粗:',run_0.font.bold) # 是否加粗: None print('是否斜體:',run_0.font.italic) # 是否斜體: True print('字體顏色:',run_0.font.color.rgb) # 字體顏色: FF0000 print('字體高亮:',run_0.font.highlight_color) # 字體高亮: YELLOW (7) print('下劃線:',run_0.font.underline) # 下劃線: True print('洗掉線:',run_0.font.strike) # 洗掉線: None print('雙洗掉線:',run_0.font.double_strike) # 雙洗掉線: None print('下標:',run_0.font.subscript) # 下標: None print('上標:',run_0.font.superscript) # 上標: NoneLIK2
注:前面的博客好像也沒介紹文字背景顏色的設定…
背景顏色設定方法: (與字體顏色設定方法有區別)
# 設定背景顏色
from docx.enum.text import WD_COLOR_INDEX
run_2.font.highlight_color = WD_COLOR_INDEX.YELLOW
背景顏色可選值有:
''' 'AUTO', 0, 'default' 'BLACK', 1, 'black' 'BLUE', 2, 'blue' 'BRIGHT_GREEN', 4, 'green', 'DARK_BLUE', 9, 'darkBlue', 'DARK_RED', 13, 'darkRed' 'DARK_YELLOW', 14, 'darkYellow' 'GRAY_25', 16, 'lightGray' 'GRAY_50', 15, 'darkGray' 'GREEN', 11, 'darkGreen' 'PINK', 5, 'magenta' 'RED', 6, 'red' 'TEAL', 10, 'darkCyan' 'TURQUOISE', 3, 'cyan' 'VIOLET', 12, 'darkMagenta' 'WHITE', 8, 'white' 'YELLOW', 7, 'yellow' '''LIK3
4、獲取檔案中表格資訊:
示例檔案中表格截圖:

1、獲取表格樣式、單元格物件及文字資訊:
# 獲取檔案中表格資訊
tables = doc.tables # 獲取檔案中所有表格物件的串列
print(tables)
# [<docx.table.Table object at 0x000001957059CD48>]
print(len(tables)) # 查看檔案中表格數量
# 1
table0 = tables[0] # 獲取表格物件
# 獲取表格的樣式資訊
print(table0.style)
# _TableStyle('Normal Table') id: 190621384
# 獲取一個表格的所有單元格
cells = table0._cells
print(len(cells)) # 表格中單元格數量
# 15
# 獲取單元格內所有文字資訊
cells_string = [cell.text for cell in cells]
print(cells_string)
LIK4
cells_string 列印截圖:

從截圖中可以看出來,用 tableobj._cells 獲取到的單元格物件串列是按行排列的,
2、獲取表格的行列物件:
# 獲取表格物件行數量、列數量
col_num = len(table0.columns)
print(col_num) # 3
# 行數量
row_num = len(table0.rows)
print(row_num) # 5
# 獲取行物件
row0 = table0.rows[0]
# 獲取列物件
col0 = table0.columns[0]
# 獲取行物件文字資訊
'要用 row0.cells 獲取行物件的 cell 才能獲取其文字資訊'
row0_string = [cell.text for cell in row0.cells]
print(row0_string)
# 獲取列物件文字資訊
col0_string = [cell.text for cell in col0.cells]
print(col0_string)
LIK5
注:在介紹單元格格式資訊時,說過單元格內文字資訊也是通過 run 物件設定,故獲取文字資訊也和前面獲取段落文字資訊類似,就不重復講了,
結尾:
以上就是本篇博客的全部內容了,后面將會用兩個實體來將前面三篇博客的知識點串聯起來,感謝閱讀,
【Python與Office】專欄
該專欄會對 Python 的第三方模塊,如:xlwt,xlrd,python-docx等,操作 Office 辦公軟體(Word Excel PPT)的方法進行詳細講解,同時也會搭配一些實體演練,一方面強化知識點的理解與運用,另一方面也希望能起到,引導讀者進行思考:如何用 python 提高 offic 辦公軟體辦公效率的作用,
感興趣的朋友,可以點個 關注 或 收藏 ,如在博客中遇到任何問題或有一些想法、需求,可留言或私信,
創作不易,你的支持是我最大的動力,感謝 !
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93480.html
標籤:Python
上一篇:python基礎
下一篇:Python基礎-函式
