Python 实现文本文件与 Word 文档互转的两种方法

在日常办公和开发工作中,将纯文本内容转换为 Word 文档是一项常见需求。无论是生成报告、整理笔记,还是制作正式的文档材料,能够通过编程自动化完成这一过程都能显著提升效率。本文将介绍如何使用 Python 配合第三方 Word 处理库来实现文本文件到 Word 文档的转换,并提供两种不同的实现路径供读者参考。

关于所使用的库

本文使用的是一个用于处理 Word 文档的 Python 第三方库。根据公开资料,它是一个独立的 Word 文档处理工具,可以在不安装 Microsoft Word 的情况下创建、读取、写入、转换和打印 Word 文档。

该库支持多种 Word 文档格式(如 .doc、.docx),并提供了一套相对完整的 API,用于操作文档中的段落、表格、图片、页眉页脚等元素。

环境配置

开始之前,需要通过 pip 安装所需的库:

bash 复制代码
pip install spire.doc

安装完成后,在 Python 脚本中导入所需模块:

python 复制代码
from spire.doc import *
from spire.doc.common import *

方法一:直接加载 TXT 并保存为 Word

这是最简洁高效的实现方式。该库的 LoadFromFile() 方法支持直接加载文本文件,内部会处理编码和段落解析,然后将内容转换为 Word 文档结构。

python 复制代码
from spire.doc import *
from spire.doc.common import *

# 创建 Document 对象
document = Document()

# 加载 TXT 文件
document.LoadFromFile("input.txt")

# 保存为 Word 文档
document.SaveToFile("TxtToWord.docx", FileFormat.Docx2016)
document.Close()

代码说明

  • LoadFromFile("input.txt"):加载指定路径的文本文件。默认使用 UTF-8 编码,如果需要指定其他编码格式,可以通过 LoadFromFile(fileName, encoding) 的重载方法传入编码参数。
  • SaveToFile("TxtToWord.docx", FileFormat.Docx2016):将文档保存为 .docx 格式。FileFormat 枚举还支持 DocDocxDocx2013Docx2016 等多种版本。
  • Close():关闭文档并释放资源。

这种方法适合大多数场景,尤其是当只需要将整个文本文件原样转换为 Word 文档时。转换过程中,该库会自动将 TXT 文件中的换行符映射为 Word 文档中的段落分隔。

方法二:逐段读取并写入 Word

如果需要更精细地控制文档结构------例如在转换过程中添加额外信息、对不同的段落应用不同的格式,或者需要在文本中穿插图片、表格等其他元素,则可以采用逐段读取并写入的方式。

python 复制代码
from spire.doc import *
from spire.doc.common import *

# 读取文本文件
with open("input.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

# 创建 Word 文档
doc = Document()
section = doc.AddSection()

for line in lines:
    line = line.strip()
    if not line:
        # 空行可以跳过,或者添加一个空段落
        continue
    paragraph = section.AddParagraph()
    paragraph.AppendText(line)

doc.SaveToFile("文本转Word.docx", FileFormat.Docx2016)
doc.Close()

这种方式的灵活性更高。例如,可以在读取过程中判断行内容,将特定格式的行设置为标题样式:

python 复制代码
for line in lines:
    line = line.strip()
    if not line:
        continue
    paragraph = section.AddParagraph()
    text_range = paragraph.AppendText(line)
    if line.startswith("#"):  # 假设以 # 开头的行作为标题
        text_range.CharacterFormat.Bold = True
        text_range.CharacterFormat.FontSize = 16
        paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center

文档格式化能力

无论采用哪种方式,该库都允许在转换过程中或转换之后对文档进行格式化。

应用内置样式

该库支持 Word 的内置样式,如标题样式:

python 复制代码
paragraph = section.AddParagraph()
text_range = paragraph.AppendText("第一章 概述")
paragraph.ApplyStyle(BuiltinStyle.Heading1)

自定义样式

也可以创建自定义样式并应用到段落:

python 复制代码
# 创建段落样式
style = ParagraphStyle(doc)
style.Name = "自定义正文"
style.CharacterFormat.FontName = "宋体"
style.CharacterFormat.FontSize = 12
doc.Styles.Add(style)

# 应用样式
paragraph.ApplyStyle("自定义正文")

文本修饰

通过 CharacterFormat 可以设置字体、字号、颜色、加粗、斜体等属性:

python 复制代码
text_range = paragraph.AppendText("这是加粗红色文字")
text_range.CharacterFormat.Bold = True
text_range.CharacterFormat.TextColor = Color.get_Red()
text_range.CharacterFormat.FontSize = 14

段落对齐与边距

段落对齐方式可以通过 Format.HorizontalAlignment 设置:

python 复制代码
paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center

页面边距等页面设置可在 Section 级别配置:

python 复制代码
section.PageSetup.Margins.All = 40  # 单位:磅

两种方案的适用场景对比

方案 优点 适用场景
直接加载转换 代码简洁、性能好、保留原始段落结构 完整文本文件的批量转换,无需额外处理
逐段读写 灵活性高、可精细化控制格式和内容 需要在转换过程中插入额外内容、条件格式化、动态生成文档

注意事项

  1. 编码问题 :直接使用 LoadFromFile("input.txt") 时默认使用 UTF-8 编码。如果 TXT 文件使用其他编码(如 GBK),应使用 LoadFromFile("input.txt", encoding="gbk") 指定编码。
  2. 资源释放 :处理完成后建议调用 Close()Dispose() 释放资源。
  3. 段落换行:直接加载方式会自动处理换行;逐段读写时需要注意空行的处理逻辑。
  4. 环境依赖:该库是独立的 Word 处理工具,不需要本机安装 Microsoft Office。

结语

通过 Python 第三方库提供的 API,可以便捷地实现 TXT 到 Word 的转换。直接加载方式用极少的代码即可完成转换任务,适合大多数批量处理场景;而逐段读写方式则为需要精细格式化控制的场景提供了更大的灵活性。开发者可以根据实际需求选择适合的实现方案。该库还支持插入图片、表格、页眉页脚等更复杂的功能,可根据具体项目需要进一步了解。

相关推荐
Zane19942 小时前
明明在赋值前读取,为什么还会报 UnboundLocalError?global 与 nonlocal 深挖
后端·python
YHL2 小时前
🎯 Danci —— 用 AI 驱动开发一个全栈英语单词学习平台
前端·后端
小毛驴8502 小时前
Jupyter Notebook 安装步骤
ide·python·jupyter
步行cgn2 小时前
Spring 的核心特点与设计哲学
后端
掘金者阿豪2 小时前
数据库迁移最麻烦的,不是迁,而是动手之前心里没底
后端
BUG研究员_2 小时前
LangGraph节点缓存-CachePolicy
python·缓存·langraph
中趴菜2 小时前
HTML 双重转义排查实战指南
后端
quantdash_cc2 小时前
如何设计高效率的批量股票数据获取程序?QuantDash Python SDK 全市场行情拉取实战指南
开发语言·python·数据分析·量化交易·股票数据·quantdash
AskHarries2 小时前
花了 500 大洋买下 bbs.ss,我决定做一个真正属于出海人的论坛
后端