分享

【三】如何使用python读取一篇docx文档,并检测其是否包含特定字符

 wenxuefeng360 2022-07-18 发布于四川

环境配置:python 3.9
开发IDE:pycharm

(一)使用python-docx库

具体pip库的方式已经在本专栏的前文中提到啦,需要的朋友可以自己去看一下:
【一】为什么有时候在cmd里pip的包,pycharm里面找不到?

以下是docx库官方的示例文档:

from docx import Document

doc = Document('demo.docx') #改为自己文件的存储地址

#每一段的内容
for para in doc.paragraphs:
    print(para.text)

#每一段的编号、内容
for i in range(len(doc.paragraphs)):
    print(str(i),  doc.paragraphs[i].text)

#表格
tbs = doc.tables
for tb in tbs:
    #行
    for row in tb.rows:
        #列
        for cell in row.cells:
            print(cell.text)
            #也可以用下面方法
            '''text = ''
            for p in cell.paragraphs:
                text += p.text
            print(text)'''

以下是输出结果(我直接把结果打印成PDF了,这样方便截图):
在这里插入图片描述

(二)使用方法解析(自我学习笔记 = 小白模式)

当docx库在读取文件的时候,它会采用一段一段读的方式。

把每一段的内容读进来之后,再合并在一起

注意此处代码中的 para, 我认为这是docx库里的一个默认参数,代表每个当前段落。

#每一段的内容
for para in doc.paragraphs:
    print(para.text)

text是para的一个属性,代表para的内容。

一个示例:
1)原文档截图如下:
在这里插入图片描述
2)代码:

from docx import Document

doc = Document('D:\周计划\FirstWeekPlan.docx') #打开文件

#读取段落内容,并打印
for para in doc.paragraphs:
    print(para.text)

3)输出结果展示:
在这里插入图片描述

这展示了几个结论:
第一,para在读取文档内容的时候,确实是分段的。其区分分段的方式就是换行符,因此在原文档中换行的部分会被直接保留下来。

第二,docx库读取文件时将保留空格,这也意味着可以用空格来判断终止符。

tips:
1)在写文件地址的时候,要小心别带上了休止符。
比如这个文件的名字一开始叫做 firstWeekPlan,打头的f是小写,连接上'\’就会变成’\f ’ 符号,这将使得地址无效

2)文档名为汉字时是可以识别的。

3)获取文件地址的方式:按住shift, 在文件上单击右键,选择复制文件地址。

如果控制台提示找不到文件,直接检查地址中是不是有无效的地方,肯定是哪里出毛病了,该改就改。

(三)如何检测该文档中是否包含特定字符

因为 para.text 属性本质上也是一种字符串,因此最早想到的方法就是使用
in , not in
find
这两种方法。

但试过之后,都有同样的问题,那就是:
编译虽然不出错,但是检测不到汉语;而且也不单单是汉语词条检索不到,一些英文单词也找不到。

排除了中英文的问题之后,我开始考虑是不是para对象是一个类似指针的东西,即如果它便利到了最后,就无法继续对前文进行搜查。

于是改进尝试如下(这次用了一个英文文档):

from docx import Document

doc = Document("D:\once.docx") #打开文件

#读取段落内容,并打印
strB = 'upon'
for para in doc.paragraphs:
    if(strB in para.text):#在逐段判断的时候遍历,不能在最后找
        print(strB)
    print(para.text)

#判断文档是否包含特定内容
strA = para.text

result = strB in strA
#print(result)

print(strA.find(strB))

果然可以输出了。

于是进一步改进,不输出文档直接判断会怎么样?
直接就可以输出。

from docx import Document

doc = Document("D:\once.docx") #打开文件

#读取段落内容,并打印
strB = 'circumstances' #要检测的词条
for para in doc.paragraphs:
    if(strB in para.text):#在逐段判断的时候遍历,不能在最后找
        print('True')
    #print(para.text)

结论是:Para是一个类似指针的遍历方式,如果遍历到文档的末尾了,就需要手动调整到文档最前,否则无法继续。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多