FK二十一 发表于 2021-10-7 21:07:22

一个批量查询程序

关键字批量查找程序一、功能简介该程序现有功能是:批量查找关键字。该功能适合苦苦挣扎在对比Excel表上内容的同学。如果在Excel表上进行比对,可能比较好的方法就是使用Excel里面的查找功能,那么你将不得不将一个个关键字输入进去运行查找。但是使用这个程序,你能够做到批量查找!换而言之,运用该程序你可以迅速找出两个文档的不同之处,从而进行更好的对比!!!由于开发者的根基尚浅,功能的不完善之处敬请谅解。如果程序的使用需求足够大,开发者将会对程序进行迭代,以求满足更多小伙伴们的更加细致的需求。^_^
二、操作流程1. 区分母文档和子文档(附加一个体现功能的小栗子)我们把需要两个需要对比查询的文件分为母文档和子文档。两者的区别在于内容。一般来说,母文档的内容包含子文档。【注意】:两者都是后缀名为“.txt”的文件!!!
举个栗子:

子文档的内容:胡歌,吴彦祖,迪丽热巴,霍建华

母文档的内容:帅气的吴彦祖,单身的胡歌,漂亮的迪丽热巴,剩下的古力娜扎,小建华不配有姓名。

那么使用该程序之后我们可以得到:
子文档在母文档中查找到的关键词数:3

子文档关键词数:4
母文档关键词数:5

子文档在母文档中查找到的关键词:
胡歌,吴彦祖,迪丽热巴

子文档在母文档中没有查找到的关键字:
霍建华

母文档中剩余的关键词为:剩下的古力娜扎,小建华不配有姓名。
2.文件预处理(这个程序最让人痛苦的就是文件的预处理,不过我也没办法,要是能解决我就解决了是吧T_T)


步骤一:创建一个子文档和一个母文档(用记事本生成 “.txt”文件,不能用word文件!!!这该死的officeT_T)

步骤二:将需要对比查重叠的内容复制到子文档和母文档中,注意上文说的子文档和母文档的区别!二者的区别可以这样理解:我们用“舔狗”可以在“我不是一条舔狗”中找到“舔狗”这个词语;但是我们不能用“我不是一条舔狗”在“舔狗”中找到“我不是一条舔狗”这样的七个字的词语,因为他喵的“舔狗”也才只有两个字!!!

步骤三:对两个文档进行处理,我们需要统一“关键字分割符号”!
举个栗子:
file:///C:\Users\jy\AppData\Local\Temp\ksohtml\wpsDF0F.tmp.jpg


我们需要统一把分隔的标点符号统一改为:
或者 中文的逗号“,”
或者 中文的顿号“、”
或者 中文的分号“;”
或者 中文的句号“。”
或者 英文的逗号“,”
或者 英文的分号“;”
或者 英文的句号“.”

如下,修改后为:

file:///C:\Users\jy\AppData\Local\Temp\ksohtml\wpsDF20.tmp.jpg

如果我们的内容是从excel表上复制下来的,像这样:



file:///C:\Users\jy\AppData\Local\Temp\ksohtml\wpsDF21.tmp.jpg




那么OK料到。。。
你只要在“关键字分隔符”选项框选择:“换行符”
就可以了!
接下来的就交给程序吧!

(小伙伴们可以多跑两遍程序就熟悉了^_^)


写在最后:

觉得功能还不够完善,想提一些改进意见的小伙伴可以联系我:13682831689 觉得这个小程序对你有帮助的话有空还可以请我喝杯茶呀。^_^

import easygui as g
def file_deal(way,symbol):
    """:file_deal 是根据关键字分隔符号symbol来对文本进行处理,
    返回的值是一个列表。"""
    with open(way,encoding='utf-8') as f:
      list_text=[]#将文本以关键词的形式储存在链表
      if symbol == '其他字符':
            #如果选择'其他符号',则生成一个选择框,返回分隔符号choose。
            choose=g.choicebox('选择文本关键字的分隔符',choices=['中文的逗号: ,','中文的分号: ;','中文的顿号: 、','中文的句号: 。','英文的逗号: ,','英文的分号: ;','英文的句号: .'])
            if choose:
                chosen=choose
                estr=''
                for each_line in f:
                  if '\n' in each_line:
                        each_line=each_line.replace('\n','')
                  estr+=each_line
                list_text=estr.split(chosen)
            else:
                pass
      elif symbol == '换行符':
            for each_line in f :
                new_line=each_line.replace('\n','')
                if new_line != '' :
                  list_text.append(new_line)

    return list_text

def result(mom_list,son_list):
    """这个函数调用了easygui来展示最终的批量查询结果"""
    coincide_list=[] #子表与母表的重叠列表
    for each_in_son in son_list:
      for each_in_mom in mom_list:
            if each_in_son in each_in_mom:
                coincide_list.append(each_in_son)
    coincide_list_count='子文档在母文件档中查找到的关键词数为:'+str(len(coincide_list))+'\n'
    son_list_count='子文档的关键词数为:'+str(len(son_list))+'\n\n'
    mom_list_count='母文档的关键词数为:'+str(len(mom_list))+'\n\n'
    son_list_over = son_list[:]
    for each in coincide_list:
      if each in son_list:
            son_list_over.remove(each)
    mom_list_over = mom_list[:]
    for each1 in coincide_list:
      for each2 in mom_list:
            if each1 in each2:
                mom_list_over.remove(each2)
    text1='子文档在母文档中查找到的关键词为:\n\n'+str(coincide_list)
    text2='\n\n\n\n子文档在母文档中没有查找到的关键词为:\n\n'+str(son_list_over)
    text3='\n\n\n\n母文档中剩余的关键词为:\n\n'+str(mom_list_over)
    g.textbox('查询结束!!!\n\n'+mom_list_count+son_list_count+coincide_list_count,'结果显示',text=text1+text2+text3)
def run(function):
    """这是一个综合调用各个功能并用easygui和用户互动的函数。
       在run函数中,你可以调取不同的功能!
       由于该版本是1.0版本,并且需求场景不够清晰,因此目前只有一个功能。>_<"""
    if function =='关键字批量查找功能' :
      msg='                              关键字批量查找功能\n\n\n' \
      '【请确保等待处理的文档已经按照发出的使用说明进行处理!(使用.txt文档)】\n\n\n' \
      '【未按照使用说明有可能会得出错误结果!】'
      if g.msgbox(msg,'Bulk Search '):
            if g.msgbox('接下来请选择“母”文档\n\n\n【注意】母文档一般是 : “待查询”的文件'):
                mom_file_way=g.fileopenbox('请选择“母”文档:')
                if mom_file_way:
                  mom_character=g.buttonbox('请选择”母“文档的关键字分割符号\n\n(如果不知道什么是“关键字分割符号”,请关闭程序并打开说明文档。。。)', choices=['换行符', '其他字符'])
                  if mom_character:
                        mom_list1=file_deal(mom_file_way,mom_character)
                        if g.msgbox('接下来请选择“子”文档\n\n\n【注意】子文档一般是 : “用来”查询的文件'):
                            son_file_way=g.fileopenbox('请选择“子”文档:')
                            if son_file_way:
                              son_character=g.buttonbox('请选择“子”文档的关键字分割符号\n\n如果不知道什么是“关键字分割符号”,请关闭程序并打开说明文档。。。', choices=['换行符', '其他字符'])
                              if son_character:
                                    son_list1=file_deal(son_file_way,son_character)
                                    result(mom_list1,son_list1)
ch=g.buttonbox('请选择需要的功能',choices=['关键字批量查找功能'])
run(ch)


页: [1]
查看完整版本: 一个批量查询程序