python提取docx文档的信息(文本+表格)

一、说明:

本文的需求是提取docx文档里面的数据信息,包括文本和Excel表格信息。
经过一上午的搜索,目前找到了一些文字,整理成自己需要的的代码。

二、提取数据

安装模块:

我这里直接命令安装即可。

pip install python-docx

1、提取文本内容:

这里只有按原的每行保存为一个大的字符串。
具体不废话了,直接上代码:

import docx

def extract_docx_text(docFile):
    # 获取文档对象
    document = docx.Document(docFile)
    # 完整的text:
    docx_text = ""
    for para in document.paragraphs:
        docx_text += para.text + '\n'
    return docx_text


if __name__ == '__main__':
    docFile = 'W020200731560335069483.docx'
    docx_text = extract_docx_text(docFile)
    print("docx_text", docx_text)

效果图:

是根据每行的内容保存,还是原样的行保存一个大的字符串样式,方便后续需求区分开每行内容。
在这里插入图片描述

2、提取Excel表格内容:

我这里根据读取所有表格,然后根据每个表格进行弄成json格式,以表格的列名称作为key,值为列表。

1)、每列数据作为一个list

from docx import Document



def extract_table_data(tables_i):
    columns = tables_i.columns
    tables_i_json = {
    
    }
    # 列标题
    columns_name_json = {
    
    }  # 用来下面表格的行做铺垫使用
    for columns_i in range(len(columns)):
        tables_i_json[tables_i.cell(0, columns_i).text] = []
        columns_name_json[columns_i] = tables_i.cell(0, columns_i).text

    for row_i in range(1, len(tables_i.rows)):  # 从表格第二行开始循环读取表格数据
        for columns_i in range(len(columns)):
            tables_i_json[columns_name_json[columns_i]].append(tables_i.cell(row_i, columns_i).text)
    return tables_i_json



def extract_docx_excel_data(docFile):
    document = Document(docFile)  # 读入文件
    # print("document",dir(document))
    tables = document.tables  # 获取文件中的表格集
    # print("dir", dir(document))
    # print("tables", tables)
    tables_json = []
    for tables_i in tables:
        tables_i_json = extract_table_data(tables_i)
        tables_json.append(tables_i_json)
    print("tables_json",tables_json)
    return tables_json


if __name__ == '__main__':
    docFile = 'W020200731560335069483.docx'
    tables_json = extract_docx_excel_data(docFile)

2)、每行一个json:

from docx import Document



def extract_table_data(tables_i):
    columns = tables_i.columns
    """每列作为列表"""
    # tables_i_json = {}
    # # 列标题
    # columns_name_json = {}  # 用来下面表格的行做铺垫使用
    # for columns_i in range(len(columns)):
    #     tables_i_json[tables_i.cell(0, columns_i).text] = []
    #     columns_name_json[columns_i] = tables_i.cell(0, columns_i).text
    #
    # for row_i in range(1, len(tables_i.rows)):  # 从表格第二行开始循环读取表格数据
    #     for columns_i in range(len(columns)):
    #         tables_i_json[columns_name_json[columns_i]].append(tables_i.cell(row_i, columns_i).text)
    """每行一个json"""
    table_data = []
    # # 列标题
    head_name = []
    for columns_i in range(len(columns)):
        head_name.append(tables_i.cell(0, columns_i).text)

    for row_i in range(1, len(tables_i.rows)):  # 从表格第二行开始循环读取表格数据
        row_json = {
    
    }
        for columns_i in range(len(columns)):
            row_json[head_name[columns_i]] = tables_i.cell(row_i, columns_i).text
        table_data.append(row_json)

    return table_data



def extract_docx_excel_data(docFile):
    document = Document(docFile)  # 读入文件
    # print("document",dir(document))
    tables = document.tables  # 获取文件中的表格集
    # print("dir", dir(document))
    # print("tables", tables)
    tables_json = []
    for tables_i in tables:
        tables_i_json = extract_table_data(tables_i)
        tables_json.append(tables_i_json)
    print("tables_json",tables_json)
    return tables_json


if __name__ == '__main__':
    docFile = 'W020200731560335069483.docx'
    tables_json = extract_docx_excel_data(docFile)

直接上代码,自己更换自己的docFile 文件路径即可解决问题。

参考学习的一些文章:

https://zhuanlan.zhihu.com/p/55963556
https://www.cnblogs.com/klb561/p/9982937.html
https://blog.csdn.net/weixin_40449300/article/details/79143971
https://blog.csdn.net/woshisangsang/article/details/75221723
https://zhuanlan.zhihu.com/p/45997055

猜你喜欢

转载自blog.csdn.net/weixin_42081389/article/details/108235948