利用python工具提取多个word中的图片和表格

2023-09-14 11:18:20

1. 前言

由于工作因素,经常要对多个文档内容进行查重,文字类可以借助查重工具辅助,但图片和表格只能依靠鼠标滚轮还有笔者的打工眼。久而久之,眼睛废了,肩颈也吃不消了(-.-)。于是乎,就想用脚本批量导出,从而提高效率。
笔者非软件专业,所以只能请ChatGPT当导师了,经过多次修改,总算达到了预期效果。
大佬们如果有更好的办法,还请与我联系……下面是操作步骤。

2.安装python环境

官网下载: https://www.python.org/downloads/windows/

网上找个教程安装下去,命令行输入python能回显版本即可。

快捷键Ctrl+Z 退出python界面,而后安装pythone的docx、docx2txt 库

pip install python-docx
pip install docx2txt

在这里插入图片描述

3. python脚本

import os
from docx import Document
import docx2txt
from docx.enum.table import WD_ALIGN_VERTICAL

def extract_images_and_tables(input_docx_file, output_folder):
    # 创建输出文件夹
    folder_name = os.path.splitext(os.path.basename(input_docx_file))[0]
    output_folder = os.path.join(output_folder, folder_name)
    os.makedirs(output_folder, exist_ok=True)

    # 提取Word文档中的图片并保存到输出文件夹
    docx2txt.process(input_docx_file, output_folder)

    # 提取Word文档中的表格并保存到一个单独的文件
    doc = Document(input_docx_file)
    table_output_path = os.path.join(output_folder, "02-文档表格.docx")  # 修改文件名
    table_doc = Document()

    for table in doc.tables:
        new_table = table_doc.add_table(rows=len(table.rows), cols=len(table.columns))
        
        # 复制表格样式和内容
        for i, row in enumerate(table.rows):
            for j, cell in enumerate(row.cells):
                new_cell = new_table.cell(i, j)
                
                # 复制单元格的文本和样式
                for paragraph in cell.paragraphs:
                    new_paragraph = new_cell.add_paragraph(paragraph.text)
                    new_paragraph.alignment = paragraph.alignment
                    new_paragraph.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
                    for run in paragraph.runs:
                        new_run = new_paragraph.runs[-1]  # 使用最后一个Run来避免样式重叠
                        new_run.bold = run.bold
                        new_run.italic = run.italic
                        new_run.underline = run.underline
                        new_run.font.size = run.font.size
                        new_run.font.name = run.font.name
                        new_run.font.color.rgb = run.font.color.rgb

    table_doc.save(table_output_path)
    print(f"提取了所有表格并保存到 {table_output_path}")

    # 提取大纲标题并生成目录文档
    outline_output_path = os.path.join(output_folder, "01-文档目录.docx")  # 修改文件名
    outline_doc = Document()

    for paragraph in doc.paragraphs:
        if paragraph.style.name.startswith('Heading'):
            level = int(paragraph.style.name.split()[-1])
            outline_doc.add_paragraph(paragraph.text, style=f'Heading {level}')
            
    outline_doc.save(outline_output_path)
    print(f"生成了目录并保存到 {outline_output_path}")

if __name__ == "__main__":
    input_folder = r"D:\01-待提取文档文件夹"  # 待提取文档的所在路径
    output_folder = r"D:\02-保存文档文件夹"  # 保存提取后文档的所在路径

    docx_files = [os.path.join(input_folder, filename) for filename in os.listdir(input_folder) if filename.endswith(".docx")]

    for docx_file in docx_files:
        extract_images_and_tables(docx_file, output_folder)

4. 执行效果

================ RESTART: C:\Users\Admin\Desktop\测试脚本.py ================
提取了所有表格并保存到 D:\02-保存文档文件夹\01-我是文档A\02-文档表格.docx
生成了目录并保存到 D:\02-保存文档文件夹\01-我是文档A\01-文档目录.docx
提取了所有表格并保存到 D:\02-保存文档文件夹\02-我是文档B\02-文档表格.docx
生成了目录并保存到 D:\02-保存文档文件夹\02-我是文档B\01-文档目录.docx
提取了所有表格并保存到 D:\02-保存文档文件夹\03-我是文档C\02-文档表格.docx
生成了目录并保存到 D:\02-保存文档文件夹\03-我是文档C\01-文档目录.docx
提取了所有表格并保存到 D:\02-保存文档文件夹\04-我是文档D\02-文档表格.docx
生成了目录并保存到 D:\02-保存文档文件夹\04-我是文档D\01-文档目录.docx
在这里插入图片描述
在这里插入图片描述

更多推荐

数据库的模糊查询

命中率越高–策略越好数据库的模糊查询work918在SQL中,模糊查询可以使用LIKE关键字来实现。LIKE关键字后面可以跟一个模式,其中%表示任意数量的字符,_表示一个字符。例如,如果你想在一个名为students的表中查找所有名字以Li开头的学生,你可以这样做:SELECT*FROMstudentsWHEREnam

uview组件库的安装

更多的请查看官方文档uView2.0-全面兼容nvue的uni-app生态框架-uni-appUI框架(uviewui.com)//如果您的根目录没有package.json文件的话,请先执行如下命令://npminit-y安装npminstalluview-ui@2.0.36//更新//npmupdateuview-

【基本数据结构 四】线性数据结构:队列

学习了栈后,再来看看第四种线性表结构,也就是队列,队列和栈一样也是一种受限的线性表结构,和栈后进先出的操作方式不同的是,队列是FIFO的结构,也就是先进先出的操作方式。队列的定义队列这个概念非常好理解。可以把它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”.栈只支持两个基本

在Docker中使用MindSpore GPU版本

文章目录在Docker中使用MindSporeGPU版本获取安装命令安装安装nvidia-container-toolkit获取MindSpore镜像测试运行MindSpore镜像运行代码使用VSCode开发在Docker中使用MindSporeGPU版本参考官方文档:安装指南获取安装命令如图所示命令为dockerpu

【深入理解ES6】函数

箭头函数这是ES6中引入的一个有趣的新特性。箭头函数,顾名思义就是一种使用箭头(=>)定义的新语法,与传统函数的差别如下:没有this、super、arguments和new.target绑定,他们由外围最近一层非箭头函数决定。不能通过New关键字调用。箭头函数没有construct方法,所以不能用作构造函数。没有原型

39.地址算术运算

如果p是一个指向数组中某个元素的指针,那么p++将会对p进行自增运算并指向下一个元素,而p+=i将对p进行加i的增量运算,使其指向指针p当前所指向的元素之后的第i个元素。这类运算时指针或地址算术运算中最简单的形式。allocbuf中的空间使用状况也是我们需要了解的信息。我们使用指针allocp指向allocbuf中的下

Docker实践:使用Docker搭建个人开发环境(极简版)

文章目录说明教程1.编写Dockerfile2.编写docker-compose.yml3.使用容器创建容器启动容器进入容器命令行VSCode4.关闭容器5.备份容器导出导入6.重置容器相关资料文章合集详细了解本文在个人电脑上安装Docker容器使用NVIDIA显卡托管镜像运行GUI程序说明本文是在服务器已经配置好Do

python入门篇03 基础案例 python版与java版 语法不同之处

目录1.前言:->上篇传送门:python入门篇02python的语法基础2.案例:pzy超市的收银系统(控制台输入版)->2.0需求摘要:->2.1python代码答案:<直接可以运行>->2.2java代码答案:<必须有main方法>2.3两种代码运行的结果:(一样的结果)--->2.3.2python运行结果(图

【实用 Python 库】Python glob库:轻松应对文件和目录管理

导言在Python编程中,我们经常需要处理文件和目录。为了更便捷地处理这些任务,Python提供了glob库,它允许我们根据特定模式匹配文件和目录。本篇博客将详细介绍glob库的用法,并通过实例演示它的各种功能。什么是glob库?glob库是Python标准库中的一个模块,它提供了一个简单而强大的方法来匹配文件和目录的

springboot整合SSE

SSE简介SSE(ServerSentEvent),是一种可以主动从服务端推送消息的技术。SSE的本质其实就是一个HTTP的长连接,只不过它给客户端发送的不是一次性的数据包,而是一个stream流,格式为text/event-stream。所以客户端不会关闭连接,会一直等着服务器发过来的新的数据流。SSE服务端代码sp

Vulnhub系列靶机---Deathnote: 1死亡笔记

文章目录信息收集主机发现端口扫描目录扫描dirsearchgobusterdirb扫描漏洞利用wpscan扫描Hydra爆破总结靶机文档:Deathnote:1下载地址:Download(Mirror)难易程度:soEasy信息收集主机发现端口扫描访问靶机的80端口,报错,如下图显示:地址栏输入地址后,自动跳转到一个域

热文推荐