网络编程
位置:首页>> 网络编程>> Python编程>> Python中docx2txt库的使用说明

Python中docx2txt库的使用说明

作者:angus_monroe  发布时间:2022-03-23 18:58:46 

标签: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不显示更改后的文字。

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

来源:https://blog.csdn.net/angus_monroe/article/details/79292837

0
投稿

猜你喜欢

  • 此文章主要向大家讲述的是SQL Server数据库的分布式数据库系统的实际目标,通俗的讲就是研制分布式数据库系统的目的、动机,其中主要包括的
  • sql exist的妙用create table b(a varchar(10),b varchar(10),c varchar(10))i
  • asp函数实现把数字格式化为每3个数字时以逗号间隔的数字见下:<%Function Comma(str)If No
  • 本文实例讲述了Python高级编程之继承问题。分享给大家供大家参考,具体如下:多继承问题1.单独调用父类: 一个子类同时继承自多个父类,又称
  • 1. go的依赖管理发展GOPATH 所有的依赖都放置在同一路径下,可以复用下载的依赖,但是当不同项目需要依赖不同版本的依赖时,就很容易出现
  • 1.获取function形参个数functionName.length2.较适用的运算符delete:删除以前定义的对象属性或方法的引用vo
  • 有些朋友看到这个标题可能会有疑问,难道在视图中使用*符号还有何要注意的地方吗?对于这个问题,我们先不必回答,先看一下例子吧。 我这里,使用的
  • python 根据正则表达式提取指定的内容正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。  下面演
  • 本文实例讲述了Python使用chardet判断字符编码的方法。分享给大家供大家参考。具体分析如下:Python中chardet 用来实现字
  • Tag,直译标签,是一种由用户自定义的、用于描述信息 [1]的关键词。Tagging是用户为信息赋予Tag的行为。Delicious,Fli
  • kelon 问:格式如下:s="地,在要,大,奇功,不知,但是,不示"我想把它split分出來,变成数组來循环,但是不知
  • 校验是否全由数字组成function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.
  • 1、纯粹的截取字符串function cutstr(thestr1,strlen) dim l,t,c&nbs
  • 不论是企业网站、个人博客,或者购物网站、游戏网站,我们都希望能吸引访问者并且给他们留下愉快的访问体验。可用性是用户体验的一种度量,它可以用访
  • 惊现!表面下的隐藏信息——浅谈信息可视化1910年,病卧床上的魏格那(德国气象学家,以“大陆漂移学说”闻名),无意地注视着墙上的世界地图……
  • 从publish 表中取出第 n 条到第 m 条的记录的sql语句写法:SELECT TOP m-n+1 *&
  • 李开复曾经在年前表示,谷歌公司会在今年春节期间,对Google谷歌的搜索结果页进行“从未有过的尝试”修改,以凸显农历春节的喜庆气氛。现在,输
  • Python 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了
  • 随着 CSS3 渐入人心,Web 字体逐渐成为话题,这种即将让未来的 Web 更加丰富多彩的技术(或者说标准)拥有多种可能,虽然 .webf
  • 近年来,广告已成为很多网站的主要收入来源。不久前,在线广告往往遭到访客的拒绝,广告客户也不确定它的价值和效力。今天,大多数访客期望在商业网站
手机版 网络编程 asp之家 www.aspxhome.com