环境配置: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是一个类似指针的遍历方式,如果遍历到文档的末尾了,就需要手动调整到文档最前,否则无法继续。