Python-docx 模块读写 Word 文档基础(三):读取文档文本信息、表格信息、段落格式、字体格式等
前言:1、获取文档章节信息:2、获取段落文字信息:3、获取文字格式信息:4、获取文档中表格信息:结尾:【Python与Office】专栏前言:
前两篇博客介绍了 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)# 左边距: 914400print('右边距:',sec0.right_margin)# 右边距: 914400print('上边距:',sec0.top_margin)# 上边距: 1143000print('下边距:',sec0.bottom_margin)# 下边距: 1143000print('页眉边距:',sec0.header_distance)# 页眉边距: 540385print('页脚边距:',sec0.footer_distance)# 页脚边距: 629920print('页面方向:',sec0.orientation)# 页面方向: LANDSCAPE (1)print('页面高度:',sec0.page_height)# 页面高度: 10657205print('页面宽度:',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.textprint(head0_string)# 仪征市马集镇总体规划(-2030)——说明# 获取页脚信息,也是类似的方法foot0 = sec0.footerprint(foot0) # 获取页脚对象# <docx.section._Footer object at 0x000000000B2E3808>foot0_pars = foot0.paragraphsfoot0_string = ''for par in foot0_pars:foot0_string += par.textprint(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.textprint(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)# 左缩进: Noneprint('右缩进:',par0.paragraph_format.right_indent)# 右缩进: Noneprint('首行缩进:',par0.paragraph_format.first_line_indent)# 首行缩进: 304800print('行间距:',par0.paragraph_format.line_spacing)# 行间距: 1.5print('段前间距:',par0.paragraph_format.space_before)# 段前间距: 198120print('段后间距:',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.textreturn text
文字的字体、大小、下划线等信息都包含在 run 对象中(不清楚的看前面的博客):
# 获取段落的 run 对象列表runs = par0.runsprint(runs)# 获取 run 对象run_0 = runs[0]print(run_0.text) # 获取 run 对象文字信息# 打印结果:# 坚持因地制宜,差异化打造特色小镇,
文档 段落 和 run 对象示意:
获取文字格式信息:
# 获取文字格式信息print('字体名称:',run_0.font.name)# 字体名称: 宋体print('字体大小:',run_0.font.size)# 字体大小: 152400print('是否加粗:',run_0.font.bold)# 是否加粗: Noneprint('是否斜体:',run_0.font.italic)# 是否斜体: Trueprint('字体颜色:',run_0.font.color.rgb)# 字体颜色: FF0000print('字体高亮:',run_0.font.highlight_color)# 字体高亮: YELLOW (7)print('下划线:',run_0.font.underline)# 下划线: Trueprint('删除线:',run_0.font.strike)# 删除线: Noneprint('双删除线:',run_0.font.double_strike)# 双删除线: Noneprint('下标:',run_0.font.subscript)# 下标: Noneprint('上标:',run_0.font.superscript)# 上标: None
注:前面的博客好像也没介绍文字背景颜色的设置…
背景颜色设置方法:(与字体颜色设置方法有区别)
# 设置背景颜色from docx.enum.text import WD_COLOR_INDEXrun_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)# [<docx.table.Table object at 0x000001957059CD48>]print(len(tables)) # 查看文档中表格数量# 1table0 = tables[0] # 获取表格对象# 获取表格的样式信息print(table0.style)# _TableStyle('Normal Table') id: 190621384# 获取一个表格的所有单元格cells = table0._cellsprint(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与Office】专栏
该专栏会对 Python 的第三方模块,如:xlwt,xlrd,python-docx等,操作 Office 办公软件(Word Excel PPT)的方法进行详细讲解。同时也会搭配一些实例演练,一方面强化知识点的理解与运用,另一方面也希望能起到,引导读者进行思考:如何用 python 提高 offic 办公软件办公效率的作用。
感兴趣的朋友,可以点个关注或收藏。如在博客中遇到任何问题或有一些想法、需求,可留言或私信。
创作不易,你的支持是我最大的动力,感谢 !
如果觉得《Python-docx 读写 Word 文档:读取正文 表格文本信息 段落格式 字体格式等》对你有帮助,请点赞、收藏,并留下你的观点哦!