Python跨平台读取 .doc格式文件的方法

 更新时间:2025年02月23日 10:55:12   作者:gs80140  
在跨平台的开发环境中,处理不同文件格式是一个常见问题,尤其是老旧的 .doc 格式,在这篇博客中,我们将介绍一种基于 Python 的跨平台方案,使用 LibreOffice 将 .doc 文件转换为 .docx 格式,之后再通过 docx2txt 进一步处理文档内容,需要的朋友可以参考下

引言

在跨平台的开发环境中,处理不同文件格式是一个常见问题,尤其是老旧的 .doc 格式。Microsoft Word 的 .doc 文件格式不如 .docx 格式那样广泛支持,因此我们往往需要一个可靠的方案来读取和转换 .doc 文件。在这篇博客中,我们将介绍一种基于 Python 的跨平台方案,使用 LibreOffice 将 .doc 文件转换为 .docx 格式,之后再通过 docx2txt 进一步处理文档内容。

方案概述

  • 目标:在跨平台环境中,读取 .doc 格式文件。
  • 步骤
    1. 使用 LibreOffice 将 .doc 文件转换为 .docx 格式。
    2. 使用 docx2txt 提取 .docx 文件的内容。

这种方法的好处在于:

  • LibreOffice 是跨平台的,支持 Linux、macOS 和 Windows。
  • docx2txt 是一个轻量级的库,用于从 .docx 文件中提取文本内容。

LibreOffice 跨平台安装方式

在使用 LibreOffice 转换 .doc 文件之前,您需要在操作系统中安装 LibreOffice。下面是针对不同操作系统的安装方法:

1. Windows 安装

  • 访问 LibreOffice 官方网站:LibreOffice 下载页面
  • 选择 Windows 版本,下载并安装安装包。
  • 安装完成后,确保 soffice 命令可以在命令行中被正确调用(通常 LibreOffice 会自动配置环境变量)。

2. macOS 安装

  • 打开终端,使用 Homebrew 安装 LibreOffice
brew install --cask libreoffice
  • 安装完成后,LibreOffice 应该会自动配置好相关命令,您可以通过终端运行 soffice 来确认是否安装成功。

3. Linux 安装

  • 在 Ubuntu 或 Debian 系统中,您可以使用以下命令安装 LibreOffice:
sudo apt update
sudo apt install libreoffice
  • 在 Fedora 系统中,使用以下命令:
sudo dnf install libreoffice
  • 安装完成后,您可以通过 soffice 命令来确认是否安装成功。

4. 验证安装

在任何操作系统上,您可以通过命令行检查 soffice 是否正常工作:

soffice --version

如果输出 LibreOffice 的版本信息,表示安装成功。

步骤详解

  1. 使用 LibreOffice 转换 .doc 为 .docx: LibreOffice 提供了一个命令行工具 soffice,可以批量处理文件转换。它支持将 .doc 文件转换为 .docx 格式。通过这种方式,即使原始文件是老旧的 .doc 格式,也可以转换为更现代、更易处理的 .docx 格式。

  2. 读取 .docx 文件内容: 转换完成后,我们使用 docx2txt 库来读取 .docx 文件中的文本。docx2txt 提供了简单的 API,可以提取文档中的文本内容并返回。

完整代码实现

以下是实现上述方案的完整代码:

import docx2txt
import os
import subprocess
import shlex
 
def convert_doc_to_docx(doc_file, output_directory):
    """
    使用 LibreOffice 将 .doc 文件转换为 .docx 格式
    :raises RuntimeError: 转换失败时抛出异常
    """
    try:
        # 创建输出目录(如果不存在)
        os.makedirs(output_directory, exist_ok=True)
 
        # 转义所有参数防止命令注入
        safe_doc_file = shlex.quote(doc_file)
        safe_output_dir = shlex.quote(output_directory)
 
        # 构建并执行命令
        command = f"soffice --headless --convert-to docx --outdir {safe_output_dir} {safe_doc_file}"
        result = subprocess.run(
            command,
            shell=True,
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True
        )
 
        print(f"{doc_file} 转换为 .docx 格式完成")
    except subprocess.CalledProcessError as e:
        error_msg = f"转换失败: {e.stderr.strip()}" if e.stderr else "未知错误"
        raise RuntimeError(f"{error_msg}\n命令: {e.cmd}") from e
    except Exception as e:
        raise RuntimeError(f"转换过程中发生意外错误: {str(e)}") from e
 
 
def main():
 
    # 输入文件路径
    doc_file = "D:/extracodes/open-webui/backend/docs/1.doc"
 
    # 根据 doc_file 获取目录
    output_directory = os.path.dirname(doc_file)
 
    # 根据 doc_file 的后缀 .doc 换成 .docx
    docx_file = doc_file.replace(".doc", ".docx")
 
    # 判断 docx_file 是否已经存在, 如果已经存在, 则删除掉它
    if os.path.exists(docx_file):
        os.remove(docx_file)
 
    # 第一步:将 .doc 文件转换为 .docx
    convert_doc_to_docx(doc_file, output_directory)
 
    # 第二步:对转换后的 .docx 文件进行处理(这里以转换为 HTML 为例)
    page_content = docx2txt.process(docx_file)
    print(page_content)
 
 
if __name__ == "__main__":
    main()
代码解释
  1. convert_doc_to_docx 函数: 该函数接受 .doc 文件路径和输出目录作为输入,使用 LibreOffice 的命令行工具 soffice 来将 .doc 文件转换为 .docx 格式。--headless 参数表示不启动 GUI,--convert-to 用于指定输出格式。

  2. main 函数

    • 首先定义了 .doc 文件的路径 doc_file
    • 然后通过替换文件后缀生成目标 .docx 文件路径。
    • 检查是否已有同名的 .docx 文件,如果有则删除。
    • 调用 convert_doc_to_docx 函数进行转换。
    • 转换完成后,使用 docx2txt.process 从 .docx 文件中提取文本内容,并输出。

适用环境

  • Linux/macOS/Windows:LibreOffice 和 docx2txt 都是跨平台的,因此可以在大多数操作系统上使用。
  • Python 环境:需要安装 docx2txt 库,可以通过 pip install docx2txt 安装。

结语

通过结合使用 LibreOffice 和 docx2txt,我们可以方便地跨平台处理 .doc 文件,转换成 .docx 格式后提取文本内容。这种方法简单、可靠,适用于大多数需要批量处理 .doc 文件的场景。如果你需要处理更复杂的文件内容或支持更多文件格式,还可以探索其他 Python 库,如 python-docx 或 PyWin32(仅限 Windows 环境)。

以上就是Python跨平台读取 .doc格式文件的方法的详细内容,更多关于Python跨平台读取.doc文件的资料请关注脚本之家其它相关文章!

相关文章

  • python实践项目之监控当前联网状态详情

    python实践项目之监控当前联网状态详情

    介绍一个利用Python监控当前联网状态情况的python代码,它可以清楚地知道,你的电脑网络是否是链接成功或失败,下面小编带大家来一起学习它
    2019-05-05
  • Python实现的序列化和反序列化二叉树算法示例

    Python实现的序列化和反序列化二叉树算法示例

    这篇文章主要介绍了Python实现的序列化和反序列化二叉树算法,结合实例形式分析了Python二叉树的构造、遍历、序列化、反序列化等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • 教你怎么用PyCharm为同一服务器配置多个python解释器

    教你怎么用PyCharm为同一服务器配置多个python解释器

    当我们在服务器上创建了多个虚拟环境时,也可以在 PyCharm 中配置这些虚拟环境,方便不同的项目使用不同的环境,然而按照网上教程添加多个python解释器后,PyCharm会自动帮我们创建多个重复的服务器,本文主要给出该问题的解决方法,同时也对添加解释器做一个详细的讲解
    2021-05-05
  • Python 转移文件至云对象存储的方法

    Python 转移文件至云对象存储的方法

    对象存储(Cloud Object Storage,COS)是一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。这篇文章主要介绍了Python 转移文件至云对象存储,需要的朋友可以参考下
    2021-02-02
  • Python中numpy.pad()函数的使用详解

    Python中numpy.pad()函数的使用详解

    这篇文章主要介绍了Python中numpy.pad()函数的使用详解,在卷积神经网络中,为了避免卷积运算导致输出图像缩小和图像边缘信息丢失,常常采用图像边缘填充技术,即在图像四周边缘填充0,使得卷积运算后图像大小不会缩小,同时也不会丢失边缘和角落的信息,需要的朋友可以参考下
    2023-10-10
  • Python中Matplotlib的点、线形状、颜色以及绘制散点图

    Python中Matplotlib的点、线形状、颜色以及绘制散点图

    与线型图类似的是,散点图也是一个个点集构成的,下面这篇文章主要给大家介绍了关于Python中Matplotlib的点、线形状、颜色以及绘制散点图的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 查看django版本的方法分享

    查看django版本的方法分享

    今天小编就为大家分享一篇查看django版本的方法分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 用Python按时间分割txt文件中的数据方法步骤

    用Python按时间分割txt文件中的数据方法步骤

    这篇文章主要给大家介绍了如何用Python按时间分割txt文件中的数据的方法步骤,文中通过代码示例给大家讲解的非常详细,对大家学习Python处理txt文件有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • Python lxml库的简单介绍及基本使用讲解

    Python lxml库的简单介绍及基本使用讲解

    lxml是XML和HTML的解析器,其主要功能是解析和提取XML和HTML中的数据,本文重点给大家介绍Python lxml库的简单介绍及基本使用讲解,感兴趣的朋友跟随小编一起看看吧
    2020-12-12
  • Python循环一行的写法分享

    Python循环一行的写法分享

    这篇文章主要介绍了Python循环一行的写法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论