>>> from env_helper import info; info()
页面更新时间: 2024-03-05 16:30:35
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

2.8. 实例:合并 DOCX 文件

合并文件是经常会遇到的需求。对于 Word 文件(DOCX格式),使用软件操作需要进行复制、粘贴, 说起来虽然简单,但是遇到大文件时,可能会出现无响应的问题。 尤其是文件多了之后,重复的操作也会非常无聊且易出错。

通过 python-docx 模块可以读取并写出 docx 格式的文档, 理论上可以用来使用 DOCX 文件。 但是实际使用时可能会遇到各种问题,经常导致生成的结果无法打开。

这个实例内需要使用另一个库 docxcompose 来完成演示。

2.8.1. 解决办法

使用第三方库,将多个word文档合并为一个,并且格式不发生变化。

我们利用Python的docxcompose库,这是一个用于组合 Microsoft Word(.docx)文件的第三方库,使用起来非常方便。

要安装docxcompose,可以克隆存储库,可以也使用pip进行安装:

pip install docxcompose

在 Debian 12 中,可以使用下面命令安装:

sudo apt install python3-docxcompose/

2.8.2. 处理步骤

先导入相关库 :

>>> from pathlib import Path
>>> from docxcompose.composer import Composer
>>> from docx import Document

获取我们要处理的word文档,放在一个列表内。

>>> result=[]
>>> # for uu in Path('./old').rglob('*.docx'):
>>> for uu in Path('./to_merge').rglob('*.docx'):
>>>     result.append(uu.resolve())
>>> print(result)
[PosixPath('/home/bk/book-jubook/python/jubook_python/pt05_tool/ch02_docx/to_merge/防灾减灾知识服务-技术报告-平台部分0305v1.docx'), PosixPath('/home/bk/book-jubook/python/jubook_python/pt05_tool/ch02_docx/to_merge/防灾减灾知识服务系统书稿20210615v1-ch06-0305.docx')]

创建composer对象,准备合并。

>>> filename_master=result[0]
>>> files_list=result
>>>
>>> number_of_sections=len(files_list)
>>> master = Document(filename_master)
>>> composer = Composer(master)

在文档的末尾我们要加上一个分页符,如果不加,可能排版的格式会发生混乱。这样就可以避免,再合并文档后可以将文档转化为PDF格式。

>>> for i in range(1, number_of_sections):
>>>     doc_temp = Document(files_list[i])
>>>     doc_temp.add_page_break()
>>>     composer.append(doc_temp)
>>> composer.save("xx_merged.docx")

2.8.3. 总结

使用 Python 进行合并是非常简单的,在word软件里也提供了合并的功能,但是没有使用 Python 这么方便快捷。