网站设计要素,网站开发运营服务合同,建筑工程培训课程,wordpress多线程python如何解析word文件格式#xff08;.docx#xff09;
.docx文件遵从开源的“Office Open XML标准”#xff0c;这意味着我们能用python的文本操作对它进行操作#xff08;实际上PPT和Excel也是#xff09;。而且这并不是重复造轮子#xff0c;因为市面上操作.docx的…python如何解析word文件格式.docx
.docx文件遵从开源的“Office Open XML标准”这意味着我们能用python的文本操作对它进行操作实际上PPT和Excel也是。而且这并不是重复造轮子因为市面上操作.docx的库限制性非常强 python-docx是开源的但不支持高级操作例如增加批注、修订等。spire.doc支持高级操作但需要商业许可微软开放了word的api接口但不是跨平台的。只支持win平台且学习门槛较高 所以我们从开源的标准入手用python实现操作word文件的功能。 看下图把.docx文件的后缀手动改为.zip竟然可以直接解压。原来.docx本质上是一个zip压缩包。 解压后的word文件漏出了他的真实面目。原来.docx由很多.xml文件及其他组成。注意下图框出的word/document.xml他是我们操作word文件的主角有些高级功能不在其中比如批注在另外的xml中。因为其中记录了word文档的文本、字体、段落格式等。.xml是一个纯文本文件理论上我们用python可以操作word/document.xml中定义的任何元素。 解释一下.xml格式你可以粗略的把它理解为.html。区别在于.html的标记是预先定义好的.xml的标记由架构或文档的作者定义并且是无限制的。如果你没有接触过的话我建议百度一下有助于理解下面的内容。 我举个例子来看一下word/document.xml的结构具体的含义写在注释里了
w:document xmlns:whttp://schemas.openxmlformats.org/wordprocessingml/2006/main # 注意这行下文要用到w:body # body是文档的主体是个nodelist一般只有一个元素w:p w:rsidR00F921A6 w:rsidRDefault00000000 # p代表paragraph段落w:pPr # pPr是段落属性w:numPrw:ilvl w:val255/w:numId w:val0//w:numPrw:pBdr # 段落边框w:top w:valnone w:sz0 w:space0 w:color000000/w:left w:valnone w:sz0 w:space0 w:color000000/w:bottom w:valnone w:sz0 w:space7 w:color000000/w:right w:valnone w:sz0 w:space0 w:color000000//w:pBdrw:widowControl/ # 控制孤行w:spacing w:line560 w:lineRuleexact/ # 行间距w:ind w:firstLineChars200 w:firstLine640/ # 首行缩进w:outlineLvl w:val1/ # 标题级别w:rPr # rPr是段落内的文本属性w:rFonts w:ascii方正仿宋_GBK w:eastAsia方正仿宋_GBK w:hAnsiTimes New Roman/w:kern w:val0/w:sz w:val32/w:szCs w:val32//w:rPr/w:pPrw:r # r代表run可以理解为连续的文本块w:rPr # rPr是文本属性w:rFonts w:ascii方正楷体_GBK w:eastAsia方正楷体_GBK w:hAnsiTimes New Roman w:hinteastAsia/ # 字体w:kern w:val0/ # 字间距w:sz w:val32/ # 字号w:szCs w:val32/ # 字号不知道/w:rPrw:t这是一段word中的文本/w:t # t是文本/w:r/w:p/w:body
/w:document注意看上面xml的第一行xmlns:whttp://schemas.openxmlformats.org/wordprocessingml/2006/main定义了document及其子元素的命名空间。xmlns用来声明属性比如这里xmlns:w代表绑定了w为前缀那么子元素中所有前缀为w的都绑定到命名空间http://schemas.openxmlformats.org/wordprocessingml/2006/main。为什么要着重讲命名空间呢因为docx的前缀不是统一的比如Microsoft Word一般用w但是wps就不用w了记得在操作之前先确定命名空间。 以上只是举个列子实际上各种标记种类和用法非常多。具体的标记用法参考OOXML标准你可以在下图画红框的地方查找仅适用于Microsoft Word。 OOXML标准的中文翻译https://hellowac.github.io/ecma-376-zh-cn/ 本文言尽于此后面我会再把python的源码开放出来。
1.17更新源码不放了python-doc支持修订和批注了。