python word排版_利用Python-docx 读写 Word 文档中的正文、表格、段落、字体等
前言:
前兩篇博客介紹了 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)
#
# 查看章節數量
print(len(sections)) # 2
注意:
章節對象的概念雖然比段落對象大,章節對象可以設置本章節的頁面大小頁眉頁腳等,在該章節的段落對象必須遵守該章節的設置。
但是又并不存在包含關系,也就是說不能通過章節對象獲取到段落信息。
3、獲取頁邊距等信息:
# 獲取章節對象的頁邊距等信息
sec0 = sections[0]
"class Section(object):"
‘‘‘
官方解釋:文檔節,提供對節和頁面設置的訪問。
還提供對頁眉和頁腳的訪問。
‘‘‘
print(sec0)
#
# 獲取章節頁面信息
# 獲取頁面邊距值:(單位為像素)
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)
#
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) # 獲取頁腳對象
#
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)
# 段后間距: 198120
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)
# 上標: None
注:前面的博客好像也沒介紹文字背景顏色的設置…
背景顏色設置方法: (與字體顏色設置方法有區別)
# 設置背景顏色
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‘
‘‘‘
4、獲取文檔中表格信息:
示例文檔中表格截圖:
1、獲取表格樣式、單元格對象及文字信息:
# 獲取文檔中表格信息
tables = doc.tables # 獲取文檔中所有表格對象的列表
print(tables)
# []
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)
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
注:在介紹單元格格式信息時,說過單元格內文字信息也是通過 run 對象設置,故獲取文字信息也和前面獲取段落文字信息類似,就不重復講了。
結尾:
以上就是本篇博客的全部內容了,后面將會用兩個實例來將前面三篇博客的知識點串聯起來,感謝閱讀。
該專欄會對 Python 的第三方模塊,如:xlwt,xlrd,python-docx等,操作 Office 辦公軟件(Word Excel PPT)的方法進行詳細講解。同時也會搭配一些實例演練,一方面強化知識點的理解與運用,另一方面也希望能起到,引導讀者進行思考:如何用 python 提高 offic 辦公軟件辦公效率的作用。
感興趣的朋友,可以點個 關注 或 收藏 。如在博客中遇到任何問題或有一些想法、需求,可留言或私信。
創作不易,你的支持是我最大的動力,感謝 !
原文地址:https://www.cnblogs.com/cnchemmy/p/13266233.html
總結
以上是生活随笔為你收集整理的python word排版_利用Python-docx 读写 Word 文档中的正文、表格、段落、字体等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中建立水火电站模型,基于MA
- 下一篇: 微机原理实验报告