python在海量文件中根据输入的关键字返回文件所在位置

一、需求介绍

在日常工作中,编写文档的时候,经常会有这样一个需求,例如:我们需要从一大堆的文件中查找含有某个关键字的文章,表格,ppt等。如果文件数量不大的话,我们可以一个个打开,然后搜索文件中的关键字。但是随着文件的不断增加,我们再使用这个方法的话就变得有些不太现实。这时候我们就会想能不能像everything搜索文件名一样来搜索文件内容。

二、实现步骤

下面我i们利用python代码来模拟人为操作,逐个打开指定文件夹下面的文档,然后搜索文档中是否包含输入的关键字。如果文档包含指定的关键字则输出当前文档的位置,反之,跳过当前文档,查询后面的文档重复以上操作。

三、代码实现

代码如下(示例):

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 24 19:30:37 2021

@author: Yuan
"""
from docx import Document
import os,xlrd

def get_doc_dir(tr_text,path):
    document = Document(path)
    all_paragraphs = document.paragraphs
    for paragraph in all_paragraphs:
    #打印每一个段落的文字
        if tr_text in paragraph.text:
            #print('这儿有===========')
            #print(paragraph.text)
            return True
            break
    all_tables = document.tables
    #print(type(all_tables))
    if all_tables:
        for table in all_tables:
            for row in table.rows:
                for cell in row.cells:
                    if tr_text in cell.text:
                        #print('这儿有一个')
                        #print(cell.text)
                        return True
                        break
                #break
            #break
    return False
        
def get_excel_dir(tr_text,path):
    book = xlrd.open_workbook(path)
    for sheet_name in book.sheet_names():
        sheet = book.sheet_by_name(sheet_name)
        for i in range(sheet.nrows):
            for j in  range(sheet.ncols):
                if sheet.cell(i,j).ctype==1 and tr_text in sheet.cell(i,j).value  :
                    #print('这里这里')
                    #print(sheet.cell(i,j).value)
                    return True
                    break
            #break
        #break
    return False
if __name__ == '__main__':
    
    tr_dir = r'D:\科技\日常工作记录'
    tr_text = input('请输入关键字:')
    #print(tr_text)
    #get_doc_dir(tr_text)
    #get_excel_dir(tr_text)
    for root, dirs, files in os.walk(tr_dir):
        for file_name in  files:
            if '.docx' in file_name or '.DOCX' in file_name:
                if get_doc_dir(tr_text, os.path.join(root, file_name)):
                    print(os.path.join(root, file_name))
            if '.xlsx' in file_name or '.XLSX' in file_name:
                if get_excel_dir(tr_text, os.path.join(root, file_name)):
                    print(os.path.join(root, file_name))
            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值