一、需求介绍
在日常工作中,编写文档的时候,经常会有这样一个需求,例如:我们需要从一大堆的文件中查找含有某个关键字的文章,表格,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))