python解析word

Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。

Python可以利用 python-docx 模块处理word文档,处理方式是面向对象的。也就是说 python-docx 模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。

标签简介



<w:p> 表示一个段落
<w:r> 表示一个样式串,指明它包括的文本的显示样式
<w:t> 表示真正的文本内容
<w:sectPr>  页面设置
<w:tbl> 表格
<w:br w:type="textWrapping"/>  换行

单独获取段落、换行、图片等;以及获取表格

#!/usr/bin/python3

import docx

doc = docx.Document('C:\\Users\\Administrator\\Desktop\\化学2页.docx')
# # 获取所有内容
print(doc._element.xml)

# # 遍历文档中的段落、换行、图片等
for para in doc.paragraphs:
    # 打印段落文本
    print(para.text)
	# 打印段落xml
    print(para._p.xml)


# # 遍历文档中的表格
for table in doc.tables:
    #整个table xml
	print(table._element.xml)

    # 遍历表格中的行
    for row in table.rows:
        # 遍历行中的单元格
        for cell in row.cells:
            # 打印单元格文本
            print(cell.text)
            print(para._p.xml)

顺序获取word内容

import os
import docx

from docx.document import Document
from docx.oxml.table import CT_Tbl
from docx.oxml.text.paragraph import CT_P
from docx.table import _Cell, Table
from docx.text.paragraph import Paragraph


def iter_block_items(parent):
    """
    按文档顺序给出*parent*中的每个段落和表子级。
    每个返回值都是表或段落的一个实例。*parent* 最常见的是对主Document对象的引用,但是也适用于_Cell对象,它本身可以包含段落和表格。
    """
    if isinstance(parent, Document):
        parent_elm = parent.element.body
    elif isinstance(parent, _Cell):
        parent_elm = parent._tc
    else:
        raise ValueError("something's not right")

    for child in parent_elm.iterchildren():
        if isinstance(child, CT_P):
            yield Paragraph(child, parent)
        elif isinstance(child, CT_Tbl):
            yield Table(child, parent)


def read_table(table):
    # 打印 table 所有内容        
    # return [[cell.text for cell in row.cells] for row in table.rows]
    # print(table._element.xml)
    
   	# 打印 table 子项
    for row in table.rows:
        # 打印行
        for cell in row.cells:
            # 打印单元格
            print(cell.text)
            # print(cell._element.xml)
 

   
#读取方法
def read_word(word_path):
    doc = docx.Document(word_path)
    for block in iter_block_items(doc):
        if isinstance(block, Paragraph):		#行
           	print("text:", block.text)
        elif isinstance(block, Table):			#表格
            print("table:", read_table(block))


if __name__ == '__main__':
    ROOT_DIR_P = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))  # 项目根目录
    word_path = os.path.join(ROOT_DIR_P, "D:\\item-py\\docx\\133.docx")  # pdf文件路径及文件名
    read_word(word_path)
    print("end")
Licensed under 京ICP备17003353号-3