办公软件中电子文档的格式有很多。最常用的就是微软 Word 软件支持的 DOC / DOCX 格式的文档。 其他还有 OpenOffice 的 ODT 文件格式,以及 RTF 富文本文件格式,以及诸多其他软件支持的文件格式。
在这些文件格式中, DOCX 文件格式由于其应用的广泛性以及格式的开放性得到了 Python 最好的支持。 所以这一章只针对 Python 对 DOCX 格式的读写与处理进行说明。
组成
DOCX 是微软 Word 的文件扩展名,Microsoft Office2007之后版本使用, 其基于Office Open XML标准的压缩文件格式取代了其以前专有的默认文件格式, 在传统的文件名扩展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。 任何能够打开DOC文件的文字处理软件都可以将该文档转换为DOCX文件, docx文件比doc文件所占用空间更小,是一个ZIP文件。
DOCX 文件是一个压缩文件,解压后有一个 [Content_Types].xml
和包含其他信息的 _rels
,
customXml
, docProps
, word
文件夹,
主要文字内容保存为 XML 格式,
其中的 document.xml
文件则包含了文档的主要文本内容,
在解压后的文件夹内,包含了文档的所有内容,主要包括:
[Content_Types].xml
: 每个包都必须有一个[Content Types].xml
,位于包的根目录下。 此文件包含包中部件的所有内容类型的列表。每个部件及其类型都必须列在[Content_Types].xml
中。_rels
文件夹: 每个包都包含一个关系部分,它定义了其他部分之间的关系以及与包外部资源的关系。 这将关系从内容中分离出来,并且可以在不更改引用目标的源的情况下轻松地更改关系。media
:插入的图片。theme
:文件夹。xml
:文字、格式、信息等。
DOCX 主档的组成部分可以主要分为以下的几个类别:
- 文件对象
- 与样式相关的对象
- 文字相关对象
- 表对象
- 块对象
- 与形状相关对象
- DrawingML对象
在所有 Office 应用程序中,Microsoft Word 可能是应用最广泛的应用程序, 它还经常在自定义 Office 解决方案中扮演重要的角色。 开发人员用各种不同的方式使用 Word,有一些方式很简单,而另一些极其复杂。
在 Word 中,几乎所有的操作都要调用 Document 对象本身或其内容。 当用 VBA 操作 Word 时,Document 对象表示一个打开的文档, 而且所有的 Document 对象都是 Application 对象的 Documents 集合的成员。
文档是一个由字符、单词、句子和段落组成的集合,字符组成单词,单词组成句子,句子组成段落,等等。 因此,每一个 Document 对象都具有 Characters、Words、Sentences 和 Paragraghs 四个集合。 此外,每个文档具有一个包含一个或多个节的 Sections 集合, 每一个节都有一个包含该节页眉和页脚的 HeadersFooters 集合。
处理 DOCX 模块
目前已经出现了很多使用 Python 处理 Docx 文档的库, 他们的性能和功能都很优异,常用的库有以下几个:
- Python-docx模块
在 DOCX 文档中,主要有以下几种组成部分:
- 标题
Page_break
- 段落
- 图片
- 节( Section )
- 表格
另外,还有样式对象。 进一步地,还有作者、创建日期、修改时间等文档的属性。 Open XML格式提供了与每个文档一起维护的一组描述性属性。其中之一是核心文件属性。 核心属性是所有Open XML格式所共有的,并出现在文档,演示文稿和电子表格文件中。 核心文档属性中的“核心”指的是 Dublin Core,元数据标准定义了一组核心元素来描述资源。
- Random-Word模块
- python-docx-template模块
除了上面的模块,还可以使用 pywin32
(仅限于Windows) 模块来调用 Word 软件进行文档处理。
新技术的更新迭代是非常快的,可能过一段时间就出现的更为好用的库,
但是使用以上的库依然可以帮助解决大多数的问题。