110
社区成员
发帖
与我相关
我的任务
分享事情是这样的,作为一个组织部的志愿者,每次学院评优评先的时候,就需要我们检查候选人的宿舍安全卫生优秀及不合格次数、是否挂科等情况,而宿舍安全卫生的通报都是一周一期发,一年下来好几十期,每个打开用word自带的检索功能检索几十个候选人,对电脑的内存和人的脑子都不是一件很美妙的事情。既然王老师在课上讲过python很适合解决自动化办公问题,于是决定长痛不如短痛,编写一个多文件检索程序,给未来的组织部小朋友工作减少一些压力。
1. 筛选word文档
此处使用正则表达式对后缀进行匹配,找到word文档。
原本没有筛选word文档这一功能,但是在实验中发现计算机会把我放在目录下的txt文件也加入列表中导致运行出现问题,所以决定加入筛选word文档的功能。

2. txt文件中提取关键词

3. 多文档查找
在文字和表格中查找匹配的关键词,该功能依赖python的docx库,对word文档进行操作
如果找到关键词,则存入列表中返回,若未查找到,则返回包含 '未找到关键字' 的列表

4. 写入新文档
将查找到的包含关键词的段落和表格写入新的word文档中,并设计好文档的格式

import os, re
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
global ur
def get_path(path):
file_list = os.listdir(path)
doc_list = [i for i in file_list if re.compile(r'\w+.docx').match(i)]
for i in range(len(doc_list)):
doc_list[i] = ur + '/' + doc_list[i]
return doc_list
def find_text(path, word):
document = Document(path)
findlist = []
for paragraph in document.paragraphs:
str1 = paragraph.text
if str1.find(word) != -1:
findlist.append(str1)
for table in document.tables:
for row in table.rows:
for cell in row.cells: # 检查单元格中是否包含关键词
if word in cell.text:
findlist.append(cell.text)
if findlist == []:
findlist.append('未找到关键字')
return findlist
def read_keyword(add):
with open(add + '/keyword.txt', encoding='utf=8') as f:
key_word = f.readlines()
for i in range(len(key_word)):
key_word[i] = key_word[i].strip()
return key_word
print("欢迎使用word检索器")
ur = input("请输入你要检查的文件夹,请注意,路径中使用/分隔\n")
print("请在文件夹中以keyword为名创建一个txt文件,并将关键词输入进去")
key_word = read_keyword(ur)
print(f"你要检查的关键词为{key_word}")
doc_path = get_path(ur)
list_word = []
document = Document()
for x in doc_path:
document.add_heading(x, level=1)
for i in key_word:
document.add_heading(i, level=2)
for num in range(len(find_text(x, i))):
serial_number = num + 1
str(serial_number)
str1 = 'NO.' + str(serial_number)
document.add_paragraph(str1)
document.add_paragraph(find_text(x, i)[num])
document.save(ur + '/result.docx')
科学是第一生产力,以后再也不用让电脑和脑子双重承压了>-<
这个程序用到了之前从来没有接触到的python中进行文件操作的功能,我阅读了很多博客进行学习,docx 库是个很好的工具,能进行很多实际的批量word文件操作。程序中的正则表达式是之前王老师课上的内容,用在这里刚刚好。
python中好用的库有很多,使用好能少造轮子,对解决实际问题的帮助很大。
实践中不断给程序加入新的功能,这些体会是在自己做和使用时才能想到的,因此动手对解决问题帮助很大。
实验中发生了很多千奇百怪的问题,最后都在博客中一一解答,毕竟,经受了虚拟机摧残的我,内心已经很粗糙了,信息检索能力也有很大的提升,这让我懂得,编程能力是从实践中得来的。
在选这门课程之前,我是做好了打硬仗听天书的准备的,但是听完王老师的第一堂课,才发现python原来能被讲述得如此清晰明了、生动有趣,再次感谢王老师为我们精心的备课准备。
python的用途非常广泛,每堂python课都有一个主题,从爬虫到网络通信,再到正则表达式的应用,每次课激发的关于python的兴趣都远超课程的课时,让我也不由得感慨一句:“人生苦短,我用python。”
这堂课教给我的,不仅是python的点点滴滴的知识,还有对于代码和编程的认识,记得老师特别喜欢提问什么是面向对象的语言,让我永远记住了盖浇饭。平时课程中老师展现的对于教学和研究的热忱,还有最后一课对我们的叮嘱,让我明白了学习的态度真的很重要。跟上王老师的节奏,我也克服了懒惰,在课下学习了一些python的知识,愿意花时间去深究一些bug。再次感谢王老师,感谢这门与众不同的python课。
希望王老师以后能在课下推荐一些课程相关的教程或实例用于复习巩固,并能把课堂的PPT分享在群中,不然有时不练习print都不知道怎么写了,新学习的知识很容易忘记。其他好像就找不出什么问题了,好学爱学,以后还选。