Python中docx2txt库的使用说明

docx2txt的Github地址

docx2txt是基于python的从docx文件中提取文本和图片的库。

代码是从python-docx中获取的。它也可以从页眉,页脚和超链接中提取文本。它现在也可以提取图像。

安装

pip install docx2txt

运行

1、命令行运行

# extract text
docx2txt file.docx
# extract text and images
docx2txt -i /tmp/img_dir file.docx

2、在python中调用

# extract text
docx2txt file.docx
# extract text and images
docx2txt -i /tmp/img_dir file.docx

补充:python docx提取word中的目录及文本框中的文本

问题描述

python docx提取word中的目录及文本框中的文本

解决方案

因未在docx库找到直接识别word中目录及文本框中文本的方法,所以采用了一个“笨”方法,docx库可以把word文档解析成xml格式,以解析xml的方式查找目录及文本框中文本,具体做法:

迭代出文档的所有element,其中目录的tag为“std”,找到它后提出他的所有文本即为目录文本;文本框的tag 为“textbox”,找到它后还要继续下钻寻找tag为 'r'的element,提取其文本则为文本框中文本。

# 提取word目录
file = docx.Document(file_path)
children = file.element.body.iter()
child_iters = []
for child in children:
 # 通过类型判断目录
 if child.tag.endswith('main}sdt'):
  for ci in child.iter():
   if ci.text and ci.text.strip():
    child_iters.append(ci)
catalog = [ci.text for ci in child_iters]
# 提取word文本框中文本
file = docx.Document(file_path)
children = file.element.body.iter()
child_iters = []
for child in children:
 # 通过类型判断目录
 if child.tag.endswith('textbox'):
  for ci in child.iter():
   if ci.tag.endswith('main}r'):
    child_iters.append(ci)
textbox = [ci.text for ci in child_iters]

文本域的标签,第一次找的是AlternateContent,后来发现对有些文本域失效;第二次又找到了pict,基本覆盖了测试的所有文本域;第三次把word文档的标签都找出来看了一下,发现textbox这个标签看着更靠谱,用它测试了一下,也能覆盖所有的测试文本域,决定就选择这个标签。

提取文本后,又有了新需求,提取的文本很多都不成句,呈短语或单词的形式,需要把提取的文本还原成段落形式:

file = docx.Document(file_path)
children = file.element.body.iter()
child_iters = []
tags = []
for child in children:
 # 通过类型判断目录
 if child.tag.endswith(('AlternateContent','textbox')):
  for ci in child.iter():
   tags.append(ci.tag)
   if ci.tag.endswith(('main}r', 'main}pPr')):
    child_iters.append(ci)
text = ['']
for ci in child_iters :
 if ci.tag.endswith('main}pPr'):
  text.append('')
 else:
  text[-1] += ci.text
 ci.text = ''
trans_text = ['***'+t+'***' for t in text]
print(trans_text)
i, k = 0, 0
for ci in child_iters :
 if ci.tag.endswith('main}pPr'):
  i += 1
  k = 0
 elif k == 0:
  ci.text = trans_text[i]
  k = 1
file.save('E:/***/test.docx')

把标签pPr当做换行标志, 把提取的文本每段前后都加了“***”后又写回文档中。

注:这里又发现AlternateContent这个标签必须要带上,否则可以提取文本域内的文字,但改变文字写回去保存word不显示更改后的文字。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • python encode和decode的妙用

    >>> "hello".encode("hex") '68656c6c6f' 相应的还可以 >>> '68656c6c6f'.decode("hex") 'hello' 查了一下手册,还有这些codec可用 Codec Aliases Operand type Purpose base64_codec base64, base-64 byte string Convert operand to MIME bas

  • 使用python模块plotdigitizer抠取论文图片中的数据实例详解

    技术背景 对于各行各业的研究人员来说,经常会面临这样的一个问题:有一篇不错的文章里面有很好的数据,但是这个数据在文章中仅以图片的形式出现.而假如我们希望可以从该图片中提取出数据,这样就可以用我们自己的形式重新来展现这些数据,还可以额外再附上自己优化后的数据.因此从论文图片中提取数据,是一个非常实际的需求.这里以前面写的量子退火的博客为例,博客中有这样的一张图片: 在这篇文章中,我们将介绍如何使用python从图片上把数据抠取出来. plotdigitizer的安装 这里我们使用pip来安装pyt

  • python flask框架详解

    Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档, 英文不好的同学也可以参考中文文档 1.安装flask pip install flask 2.简单上手 一个最小的 Flask 应用如下: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World' if __na

  • 使用pycallgraph分析python代码函数调用流程以及框架解析

    技术背景 在上一篇博客中,我们介绍了使用量子计算模拟器ProjectQ去生成一个随机数,也介绍了随机数的应用场景等.但是有些时候我们希望可以打开这里面实现的原理,去看看在产生随机数的过程中经历了哪些运算,调用了哪些模块.只有梳理清楚这些相关的内容,我们才能够更好的使用这个产生随机数的功能.这里我们就引入一个工具pycallgraph,可以根据执行的代码,给出这些代码背后所封装和调用的所有函数.类的关系图,让我们一起来了解下这个工具的安装和使用方法. Manjaro Linux平台安装graphv

  • 解决python 出现unknown encoding: idna 的问题

    这个问题是编码的问题在开头导入个包就行了,简答粗暴 import encodings.idna 补充:执行Python出现LookupError: unknown encoding: cp65001解决办法 在执行fetch v8时出现 E:\GitProject\svn_v8>fetch v8 Running: 'E:\GitProject\libcef\depot_tools\python276_bin\python.exe' 'E:\GitProj ect\libcef\depot_too

  • python docx的超链接网址和链接文本操作

    我就废话不多说了,大家还是直接看代码吧~ from docx import Document from docx import RT import re d=Document("./liu2.docx") for p in d.paragraphs: rels = d.part.rels for rel in rels: if rels[rel].reltype == RT.HYPERLINK: print("\n 超链接文本为", rels[rel], "

  • Python中docx2txt库的使用说明

    docx2txt的Github地址 docx2txt是基于python的从docx文件中提取文本和图片的库. 代码是从python-docx中获取的.它也可以从页眉,页脚和超链接中提取文本.它现在也可以提取图像. 安装 pip install docx2txt 运行 1.命令行运行 # extract text docx2txt file.docx # extract text and images docx2txt -i /tmp/img_dir file.docx 2.在python中调用

  • python 异步async库的使用说明

    在学习asyncio之前,先理清楚同步/异步的概念: 同步是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执行第二个事务,顺序执行 异步是和同步相对的,异步是指在处理调用这个事务的之后,不会等待这个事务的处理结果,直接处理第二个事务去了,通过状态.通知.回调来通知调用者处理结果 asyncio函数: 异步IO采用消息循环的模式,重复"读取消息-处理消息"的过程,也就是说异步IO模型"需要一个消息循环,在消息循环中,主线程不断地重复"

  • python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies. 举个栗子,跨请求保持cookies,在命令行上输入下面命令: # 创建一个session对象 s = requests.Session() # 用session对象发出get请求,设置cookies s.get('http://ht

  • python中pycurl库的用法实例

    本文实例讲述了python中pycurl库的用法,分享给大家供大家参考. 该实例代码实现从指定网址读取网页,主要是pycurl库的使用. 具体实现方法如下: #定义一个类 class CallBack: """ for pycurl """ def __init__(self): """Constructor""" self.data = "" def func(se

  • Python中optparser库用法实例详解

    本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常的使用了.废话不多说,开始今天的分享吧. 简介 optparse模块主要用来为脚本传递命令参数功能. 引入 在IDE中引入optparser是很方便的. from optparser import OptionParser 初始化 相对而言,初始化需要我们多注意一点点了. 因为我们有两种不同的方式来

  • 对Python中gensim库word2vec的使用详解

    pip install gensim安装好库后,即可导入使用: 1.训练模型定义 from gensim.models import Word2Vec model = Word2Vec(sentences, sg=1, size=100, window=5, min_count=5, negative=3, sample=0.001, hs=1, workers=4) 参数解释: 1.sg=1是skip-gram算法,对低频词敏感:默认sg=0为CBOW算法. 2.size是输出词向量的维数,值

  • Python 中Pickle库的使用详解

    在"通过简单示例来理解什么是机器学习"这篇文章里提到了pickle库的使用,本文来做进一步的阐述. 那么为什么需要序列化和反序列化这一操作呢? 1.便于存储.序列化过程将文本信息转变为二进制数据流.这样就信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据.在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据.python模块大全中的Pickle模块就派

  • 详解python中docx库的安装过程

    python中docx库的简介 python-docx包,这是一个很强大的包,可以用来创建docx文档,包含段落.分页符.表格.图片.标题.样式等几乎所有的word文档中能常用的功能都包含了,这个包的主要功能便是用来创建文档,相对来说用来修改功能不是很强大.一般情况下在Anaconda中不自带,需另行下载. 导入docx的方法 我的实现方法是通过pip工具在线下载:首先打开cmd命令窗口,然后输入pip install python-docx,然后回车静等.最后命令行中出现Successfull

  • 对python中各个response的使用说明

    Python django中我们经常用的response有django中的 JsonResponse, HttpResponse,还有DRF中的Response 在使用的时候,经常会不知道如何什么时候选择用哪个response 下面简单记录下这三个response的区别 1.HttpResponse 它的返回格式为:HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码) 1)它可以返回普通文本信息 HttpResponse("哈哈哈

  • 详解Python中pyautogui库的最全使用方法

    在使用Python做脚本的话,有两个库可以使用,一个为PyUserInput库,另一个为pyautogui库.就本人而言,我更喜欢使用pyautogui库,该库功能多,使用便利.下面给大家介绍一下pyautogui库的使用方法.在cmd命令框中输入pip3 install pyautogui即可安装该库! 常用操作 我们在pyautogui库中常常使用的方法,如下: import pyautogui pyautogui.PAUSE = 1 # 调用在执行动作后暂停的秒数,只能在执行一些pyaut

随机推荐