python读取doc/docx文件

仅此记录python读取doc/docx文件的方法,和常用简单的open txt文件完全不同(版本python 3.6   Win10)

docx

使用docx包,python为其专用接口,python-docx,使用

pip install python-docx

安装即可,本人第一次在pycharm直接安装,出现了关于版本报错的问题,后来直接使用pip安装成功,简单使用如下:

import docx
path = "append/***.docx"
file = docx.Document(path)
for p in file.paragraphs:
    print(p.text)

同时,对于文档,要通过每一段来获取内容,不能直接输出file得到文本内容

docx中包含超链接网址的读取

分段读取

这次使用时,发现正常读取无法读取docx中网址,例如下面word文档(.docx)中的网址:

csdn:https://blog.csdn.net/weixin_39643135/article/details/91348983

腾讯网:https://www.qq.com/

百度:https://www.baidu.com/

 将该docx复制一份,并重命名为.zip,然后解压缩,得到:

打开word文件夹,查看document.xml,大致看一下结构:

 就可以大致了解后面获取超链接的原理了。

import docx

def get_paragraph_from_docx(paragraph):
    """
    处理docx文件无法直接获取网址链接文本问题
    :param paragraph: 读取到的该段落,会自动跳过表格
    :return: 文本text,有无链接均可处理
    """
    t_para = u""
    # 有无超链接均可处理
    xml_str = str(paragraph.paragraph_format.element.xml)
    wt_list = re.findall('<w:t[\S\s]*?</w:t>', xml_str)
    for wt in wt_list:
        wt_content = re.sub('<[\S\s]*?>', u"", wt)
        t_para += wt_content
    '''
    多个链接会需要该部分,将各部分连接,最后返回的就是text了,为一个list
    text = []
    if t_para:
        t_para = t_para.strip()
        t_para = re.sub('[\s]', '', t_para)
        if t_para:
            text.append(t_para)
    '''
    return t_para

path = "append/***.docx"
file = docx.Document(path)
for p in file.paragraphs:
    text = get_paragraph_from_docx(p)

注:上面部分无法获取表格、word自动生成的编号等,类似的,这些还需要同其他正则表达式匹配 

不分段-直接读取全部

上面是用了之前的方式,分段读取超链接,还可以直接读取该篇文章的所有链接:

from docx import Document
from docx import RT

document = Document(".docx")
rels = document.part.rels
for rel in rels:
    if rels[rel].reltype == RT.HYPERLINK:
    print("\n 超链接文本为", rels[rel], " 超链接网址为: ", rels[rel]._target)

 

doc

查看了网上的各种方法,大部分还是接受将doc文件强制另存为docx文件(使用代码转换,而不是直接修改后缀),在读取即可,需要另外安装win32com模块,注意就是直接使用 pip install win32com 安装不成功,需要用

python -m pip install pypiwin32

即可,简单使用如下

import docx
import win32com.client as wc

#doc文件另存为docx
word = wc.Dispatch("Word.Application")
doc = word.Documents.Open(r"F:\\***\\***\\append\\***.doc")
#上面的地方只能使用完整绝对地址,相对地址找不到文件,且,只能用“\\”,不能用“/”,哪怕加了 r 也不行,涉及到将反斜杠看成转义字符。
doc.SaveAs(r"F:\\***\\***\\appendDoc\\***.docx", 12, False, "", True, "", False, False, False, False)#转换后的文件,12代表转换后为docx文件
#doc.SaveAs(r"F:\\***\\***\\appendDoc\\***.docx", 12)#或直接简写
#注意SaveAs会打开保存后的文件,有时可能看不到,但后台一定是打开的
doc.Close
word.Quit

path = "appendDoc/***.docx"
file = docx.Document(path)
for p in file.paragraphs:
    print(p.text)

在想办法如何可以在保存的时候不打开docx文件,查看了SaveAs的参数,但还没有发现结果。。。希望各位大佬哪位知道可以解惑

pdf

没有具体实现了解,只当看了下,需要安装库 pdfminer 使用

  • 16
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值