Python提取Word表格数据教程(含.doc/.docx)

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-应用监控,每月50GB免费额度
简介: 本文介绍了使用LibreOffice和python-docx库处理DOC文档表格的方法。首先需安装LibreOffice进行DOC到DOCX的格式转换,然后通过python-docx读取和修改表格数据。文中提供了详细的代码示例,包括格式转换函数、表格读取函数以及修改保存功能。该方法适用于Windows和Linux系统,解决了老旧DOC格式文档的处理难题,为需要处理历史文档的用户提供了实用解决方案。

 ✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨

这里有:

  • 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
  • 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
  • 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!

👉 点击直达→ 盹猫猫的个人小站 👈

🌟 来逛逛吧,说不定能挖到你正在找的技术宝藏哦~

目录

一、编写目的

二、环境准备

一、安装LibreOffice

二、安装python-docx

三、代码实现

一、转换成docx

二、读取和修改

四、总结


欢迎来到 盹猫(>^ω^<)的博客

本篇文章主要介绍了

[Python提取Word表格数据教程(含.doc/.docx)]

❤博主广交技术好友,喜欢文章的可以关注一下❤


一、编写目的

       最近由于工作上的需要,需要使用Python完成DOC文档格式数据的读取和修改工作,但通过查阅相关资料,直接对DOC文档进行读取和修改没有相关的依赖(主要为doc文件为较早的windows系统支持格式),需要将DOC文件转换为.docx格式,为什么是docx格式?

  • .docx 是 XML 格式,通常无编码问题,但若从其他格式转换可能出错。
  • python-docx依赖库可以直接对docx文档格式进行操作,但无法对doc格式进行操作。

那么问题就转变为如何将doc格式转换为.docx格式的问题,有下面的解决方法:

  • 如果你在windows系统上且安装有Microsoft Word 可以使用pywin32调用Word提供的COM口进行格式转换。

那如果就不想花钱或者安装Word,或者我使用的是其它系统(如Linux系统)又该如何转换doc格式到.docx格式呢?

       这里也找到了相关的软件支持:LibreOffice。它提供了和Word几乎相同的功能,但其为免费开源的,并且可以通过命令行进行调用,最重要的可以多系统支持。

       本篇文章就是记录使用LibreOffice+python-docx完成doc文档内表格的转换和修改的。

二、环境准备

一、安装LibreOffice

如果是Windows系统可以官网下载LibreOffice的.exe安装包,然后就是不断地下一步即可。

如果是Linux系统可以通过下面的命令进行安装:

Ubuntu/Debian:

sudo apt update && sudo apt install libreoffice

image.gif

Fedora:

sudo dnf install libreoffice

image.gif

openSUSE:

sudo zypper install libreoffice

image.gif

安装完成后,可以在命令行中进行版本验证:

soffice --version

image.gif

如果输出下述内容则表明安装成功:

LibreOffice 25.2.3.2 bbb074479178df812d175f709636b368952c2ce3

image.gif

二、安装python-docx

在已有的python环境下安装python-docx可以使用以下命令:

pip install python-docx

image.gif

三、代码实现

一、转换成docx

根据上面的步骤,先进行doc到docx的转换,我们可以使用以下命令进行转换:

soffice --headless --convert-to <目标格式> <输入文件> [--outdir <输出目录>]

image.gif

当然这里需要再Python中进行命令行的调用,直接上代码:

import os
import subprocess
import re
def convert_doc_to_docx(doc_path, output_dir, soffice_path=None):
    """
    使用 LibreOffice 将 .doc 转换为 .docx
    :param doc_path: .doc 文件路径
    :param output_dir: 输出目录(默认当前目录)
    :param soffice_path: LibreOffice 的 soffice.exe 完整路径(可选)
    :return: 转换后的 .docx 文件路径
    """
    if not doc_path.lower().endswith('.doc'):
        raise ValueError("输入文件必须是 .doc 格式")
    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)
    # 构造输出路径
    base_name = os.path.splitext(os.path.basename(doc_path))[0]
    docx_path = os.path.join(output_dir, f"{base_name}.docx")
    # 检查 LibreOffice 是否安装
    if soffice_path is None:
        try:
            # 尝试调用 soffice 命令
            subprocess.run(["soffice", "--version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            soffice_cmd = ["soffice"]
        except FileNotFoundError:
            raise RuntimeError("LibreOffice 未安装或未添加到系统 PATH 中。请确保 LibreOffice 已正确安装并在 PATH 中,或提供 soffice.exe 的完整路径。")
    else:
        soffice_cmd = [soffice_path]
    # 使用 LibreOffice 转换
    try:
        subprocess.run(
            soffice_cmd + ["--headless","--nodefault","--nologo", "--convert-to", "docx", "--outdir", output_dir, doc_path],
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
        if not os.path.exists(docx_path):
            raise RuntimeError(f"转换失败,未找到输出文件: {docx_path}")
        return docx_path
    except subprocess.CalledProcessError as e:
        error_msg = f"转换失败: {e.stderr.decode()}"
        raise RuntimeError(error_msg)

image.gif

在上面的代码中先进行LibreOffice环境是否安装的检测,然后调用命令行进行目标文件的转换,转换完成的文件放到output_dir目录下。

二、读取和修改

         转换成docx文件后就可以使用python-docx依赖对数据进行操作了,下面的Python代码实现了docx文档内表格的读取:

from docx import Document
def read_docx_tables(docx_path):
    """
    使用 python-docx 读取 .docx 文件中的表格
    :param docx_path: .docx 文件路径
    :return: 表格数据列表(每行是一个列表)
    """
    try:
        doc = Document(docx_path)
    except Exception as e:
        raise RuntimeError(f"无法读取 .docx 文件: {e}")
    tables_data = []
    for i, table in enumerate(doc.tables):
        print(f"\n表格 {i + 1}:")
        table_data = []
        for row_idx, row in enumerate(table.rows):
            row_data = [cell.text.strip() for cell in row.cells]
            # 清理单元格中的特殊字符
            row_data = [clean_text(cell) for cell in row_data]
            table_data.append(row_data)
            print(row_data)
        tables_data.append(table_data)
    return tables_data

image.gif

修改起来也是非常方便的,只需要在更新row.cells[索引].text后,执行一下doc.save(docx_path)的操作,代码如下:

from docx import Document
def modify_docx_tables(docx_path, output_path=None, modify_func=None):
    """
    仅修改 .docx 文件中的表格数据(不读取原有数据)
    
    :param docx_path: 输入的 .docx 文件路径
    :param output_path: 输出的 .docx 文件路径(如果为 None,则覆盖原文件)
    :param modify_func: 修改表格数据的函数(接收 table 并直接修改)
    """
    if output_path is None:
        output_path = docx_path  # 默认覆盖原文件
    try:
        doc = Document(docx_path)
    except Exception as e:
        raise RuntimeError(f"无法读取 .docx 文件: {e}")
    for i, table in enumerate(doc.tables):
        print(f"\n修改表格 {i + 1}:")
        
        """
        示例修改函数:将所有单元格内容改为 "MODIFIED"
        """
        for row in table.rows:
            for cell in row.cells:
                cell.text = "MODIFIED"  # 直接修改单元格内容
    # 保存修改后的文档
    doc.save(output_path)
    print(f"\n表格数据已修改并保存到: {output_path}")

image.gif

四、总结

       上面就是对doc格式的文档表格的读取和修改操作的全部内容了,虽然doc文件格式比较落后,但不可避免的有些公司可能有些比较古老的系统,在日常生产中就使用到doc文件格式,如果你有这方面的需求,希望这篇文章能帮助到你。


如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链

感谢您的关注和收藏!!!!!!

image.gif 编辑

目录
相关文章
|
8天前
|
XML 数据格式 Python
从手动编辑到代码生成:Python 助你高效创建 Word 文档
本文介绍如何用Python实现Word文档自动化生成,结合python-docx、openpyxl和matplotlib库,高效完成报告撰写、数据插入与图表生成,大幅提升办公效率,降低格式错误,实现数据驱动的文档管理。
155 2
|
19天前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
346 1
|
20天前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
223 0
|
2月前
|
机器学习/深度学习 新能源 调度
电力系统短期负荷预测(Python代码+数据+详细文章讲解)
电力系统短期负荷预测(Python代码+数据+详细文章讲解)
245 1
|
2月前
|
缓存 API 网络架构
淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
|
1月前
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
1月前
|
存储 JSON 算法
Python集合:高效处理无序唯一数据的利器
Python集合是一种高效的数据结构,具备自动去重、快速成员检测和无序性等特点,适用于数据去重、集合运算和性能优化等场景。本文通过实例详解其用法与技巧。
109 0
|
12天前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
13天前
|
索引 Python
Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧
本文通过生动的“嫁接”比喻,讲解Python列表切片赋值操作。切片可修改原列表内容,实现头部、尾部或中间元素替换,支持不等长赋值,灵活实现列表结构更新。
87 1
|
1月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
564 19