20234320 罗子林 实验4 Python综合实践

20234320 罗子林 2024-05-26 00:56:12

目录

  • 一、python实验(多文档检索器)
  • 1.实验拟解决的问题
  • 2.实验分析与设计
  • 3.程序实现
  • 4.运行视频
  • 5.源代码
  • 6.遇到的问题及解决方案
  • 7.实验心得及体会
  • 二、课程总结与意见建议
  • 1.课程总结
  • 2.意见与建议
  • 三、参考资料

一、python实验(多文档检索器)

1.实验拟解决的问题

事情是这样的,作为一个组织部的志愿者,每次学院评优评先的时候,就需要我们检查候选人的宿舍安全卫生优秀及不合格次数、是否挂科等情况,而宿舍安全卫生的通报都是一周一期发,一年下来好几十期,每个打开用word自带的检索功能检索几十个候选人,对电脑的内存和人的脑子都不是一件很美妙的事情。既然王老师在课上讲过python很适合解决自动化办公问题,于是决定长痛不如短痛,编写一个多文件检索程序,给未来的组织部小朋友工作减少一些压力。

2.实验分析与设计

  1. 用户输入目标路径,程序找到目标文件夹,筛选word文档;
  2. 从txt文件中提取关键词;
  3. 匹配文件夹中的word文档,并在多个文档中查找包含关键词的段落和表格,这是核心模块,需要确保各种格式的关键词都能查找到;
  4. 将查找到的行输出到一个新的word文档中;

3.程序实现

1. 筛选word文档

此处使用正则表达式对后缀进行匹配,找到word文档。
原本没有筛选word文档这一功能,但是在实验中发现计算机会把我放在目录下的txt文件也加入列表中导致运行出现问题,所以决定加入筛选word文档的功能。

img

2. txt文件中提取关键词

img

3. 多文档查找

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

img

4. 写入新文档

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

img

4.运行视频

5.源代码

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')

6.遇到的问题及解决方案

  1. 问题:from docx import Document 在下载docx库后无法使用
    解决思路:python3移除了exceptions模块,需要使用pycharm下载python-docx 库
  2. 问题:路径输入后无法定位到文件夹,报错信息‘unicodeescape‘ codec can‘t decode bytes in position 2-3
    解决思路:这里是因为文件夹中的地址是用 \ 来分隔不同文件夹的,而Python识别地址时只能识别用 / 分隔的地址。将路径中的\改为/就可以,在用户输入时做了专门的提醒。之后考虑在字符串前加上r或R的方法会更加方便
  3. 问题:程序可以搜索到文字段落里面的关键词,但是搜索不到word表格中的关键词
    解决思路:加入了遍历表格的代码,将检索到的表格文字添加进列表
  4. 问题:在查找当前目录的word文档时会把目录下的keyword.txt文件输入进去
    解决思路:用正则表达式筛选了.docx文件

7.实验心得及体会

科学是第一生产力,以后再也不用让电脑和脑子双重承压了>-<
这个程序用到了之前从来没有接触到的python中进行文件操作的功能,我阅读了很多博客进行学习,docx 库是个很好的工具,能进行很多实际的批量word文件操作。程序中的正则表达式是之前王老师课上的内容,用在这里刚刚好。
python中好用的库有很多,使用好能少造轮子,对解决实际问题的帮助很大。
实践中不断给程序加入新的功能,这些体会是在自己做和使用时才能想到的,因此动手对解决问题帮助很大。
实验中发生了很多千奇百怪的问题,最后都在博客中一一解答,毕竟,经受了虚拟机摧残的我,内心已经很粗糙了,信息检索能力也有很大的提升,这让我懂得,编程能力是从实践中得来的。

二、课程总结与意见建议

1.课程总结

在选这门课程之前,我是做好了打硬仗听天书的准备的,但是听完王老师的第一堂课,才发现python原来能被讲述得如此清晰明了、生动有趣,再次感谢王老师为我们精心的备课准备。
python的用途非常广泛,每堂python课都有一个主题,从爬虫到网络通信,再到正则表达式的应用,每次课激发的关于python的兴趣都远超课程的课时,让我也不由得感慨一句:“人生苦短,我用python。”
这堂课教给我的,不仅是python的点点滴滴的知识,还有对于代码和编程的认识,记得老师特别喜欢提问什么是面向对象的语言,让我永远记住了盖浇饭。平时课程中老师展现的对于教学和研究的热忱,还有最后一课对我们的叮嘱,让我明白了学习的态度真的很重要。跟上王老师的节奏,我也克服了懒惰,在课下学习了一些python的知识,愿意花时间去深究一些bug。再次感谢王老师,感谢这门与众不同的python课。

2.意见与建议

希望王老师以后能在课下推荐一些课程相关的教程或实例用于复习巩固,并能把课堂的PPT分享在群中,不然有时不练习print都不知道怎么写了,新学习的知识很容易忘记。其他好像就找不出什么问题了,好学爱学,以后还选。

三、参考资料

  1. Python报错:‘unicodeescape‘ codec can‘t decode bytes in position 2-3: truncated \UXXXXXXXX escape
  2. pycharm在使用from docx import Document时报错
  3. 用python解析word文件(三):style
  4. Python处理Word文件的实用姿势
...全文
149 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用Python!
python3.11 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧