python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片

摘要:
3一个插入的文件对象。将一个docx文件的后缀改为ZIP后是可以用解压工具打开或是解压的。事实上,Word2007的基本文件就是ZIP格式的,他可以算作是docx文件的容器。它是保存在一个ZIP文件中,然后取扩展名为docx。而其中的document.xml文件则包含了文档的主要文本内容从上面的文档我们可以了解到docx文档实际上是由XML文档打包组成的。forfinfile:printf通过上面的方式,就可以将docx中插入的文件以及图片全部解析出来。具体docx的写的方式可以参考官方文档的介绍

首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以

下面来看下如何解析docx文档:文档格式如下

python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片第1张

有3个部分组成 1 正文:text文档 2 一个表格。 3一个插入的文件对象。4 一个图片 这4个部分是我们在docx文档中最常见的几种格式。解析代码如下

import docx

def docx_try():
doc=docx.Document(r'E:py_prj est.docx')
for p in doc.paragraphs:
print p.text
for t in doc.tables:
for r in t.rows:
for c in r.cells:
print c.text

E:python2.7.11python.exe E:/py_prj/test3.py

Test文档

名称

作用

Python

解析数据

C语言

调用底层接口

HTML

网页数据

首先是用docx.Document打开对应的文件目录。docx文件的结构比较复杂,分为三层,1、Docment对象表示整个文档;2、Docment包含了Paragraph对象的列表,Paragraph对象用来表示文档中的段落;3、一个Paragraph对象包含Run对象的列表。 因此p.text会打印出整个的文本文档。而用doc.tables来遍历所有的表格。并且对每个表格通过遍历行,列的方式来得到所有的内容。

但是在运行结果中并没有找到我们插入的文件对象和图片,text.txt文档。这部分该如何解析呢。首先我们需要先来认识下docx文档的格式组成:

docx是Microsoft Office2007之后版本使用的,用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。

docx格式的文件本质上是一个ZIP文件。将一个docx文件的后缀改为ZIP后是可以用解压工具打开或是解压的。事实上,Word2007的基本文件就是ZIP格式的,他可以算作是docx文件的容器。

docx 格式文件的主要内容是保存为XML格式的,但文件并非直接保存于磁盘。它是保存在一个ZIP文件中,然后取扩展名为docx。将.docx 格式的文件后缀改为ZIP后解压, 可以看到解压出来的文件夹中有word这样一个文件夹,它包含了Word文档的大部分内容。而其中的document.xml文件则包含了文档的主要文本内容

从上面的文档我们可以了解到docx文档实际上是由XML文档打包组成的。那么我们要得到其中所有的部分,可以用ZIP解压的方式来得到所有的部件。我们先试下看是否可以

1 将docx文档改成ZIP的后缀

2 解压文件

解压之后得到如下几个文件

python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片第2张

点开word文件夹:有如下的文件夹。document.xml就是描述文本对象的文件

python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片第3张

其中embeddings文件中就是我们插入的文本对象text.txt. 是一个bin文件

python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片第4张

Media文件中就是存储的图片:

python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片第5张

我们通过手动的方式将插入的文本以及图片解析出来,那么通过代码也是同样可以解析的。代码如下。

os.chdir(r'E:py_prj') #首先改变目录到文件的目录
os.rename('test.docx','test.ZIP') # 重命名为zip文件
f=zipfile.ZipFile('test.zip','r') #进行解压
for file in f.namelist():
f.extract(file)
file=open(r'E:py_prjwordembeddingsoleObject1.bin','rb').read() #进入文件路径,读取二进制文件。
for f in file:
print f
通过上面的方式,就可以将docx中插入的文件以及图片全部解析出来。具体docx的写的方式可以参考官方文档的介绍

免责声明:文章转载自《python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇BLUE引擎检查放入装备的名称全名脚本PostgreSQL 安装配置 (亲测可用)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python编码encode decode(解惑)

关于python 字符串编码一直没有搞清楚,今天总结了一下。 Python 字符串类型 Python有两种字符串类型:str 与 unicode。 字符串实例 # -*- coding: utf-8 -*- # 这个是 str 的字符串 s = '关关雎鸠' # 这个是 unicode 的字符串 u = u'关关雎鸠' print isinstanc...

Python——XPath提取某个标签下所有文本

/text()获取指定标签下的文本内容,//text()获取指定标签下的文本内容,包括子标签下的文本内容,比较简单的是利用字符串相加: room_infos = li.xpath('.//a[@class="resblock-room"]/span//text()').extract() room_info = '' for i in room_info...

python利用递归去遍历多重dict

python中碰到多重dict,如下所示的双层dict,遍历里面的所有元素需要双重循环。现在为了代码美观,希望一句话就可以代替这样的双重for循环。 # 双重dict _dict = { 'A': { 'A1': [1, 2], 'A2': [3, 4] }, 'B': { 'B1':...

Python Linux系统管理之文件与文件路径管理

一、介绍 在 Linux 中,操作系统提供了很多的命令(例如:ls、cd),用于文件和目录管理。在 Python 中,有一个 os 模块,也提供了许多便利的方法来管理文件和目录。 二、os 模块 os:语义为操作系统。所以,os 模块提供的肯定是操作系统相关的功能了(与具体的平台无关)。 如果用 dir() 查看 os,会发现内容相当多。下面,只列出文件和...

python调用摄像头拍照并保存

import cv2 import os #引入库 print("=============================================") print("= 热键(请在摄像头的窗口使用): =") print("= z: 更改存储目录 =") print...

用Python获取计算机网卡信息

目录 0. 前言 1. 测试环境及关键代码解释 1.1 测试环境 1.1.1 系统: 1.1.2 开发工具: 2. 模块介绍及演示 2.1 platform模块使用示例 2.2 netifaces模块使用示例 2.2.1 Linux环境下如何获取网卡口的信息 2.2.2 Windows环境下如何获取网卡口的信息 3. 完整代码 4...