python操作word 查找_Python实现搜索关键字定位文件01

最近被新闻专业同学问起一个很实用的需求,大致是这样的:一个文件夹内有很多文件,怎么通过搜索关键字就可以找到内容包含关键字的word文件,同时获得关键字所在段落的内容。由于最近在学习Python,所以对这个需求很感兴趣,于是当时很快就把这个功能做出来了。

首先想到的自然是用脚本实现,新建一个kword.py文件,差不读四十几行代码将可以实现,步骤是这样的:

1.先获取文件夹里面的所有文件路径、其中用递归算法获取子文件夹内的文件路径:

def get_process_files(root_dir):

"""process all files in directory"""

cur_dir=os.path.abspath(root_dir)

file_list=os.listdir(cur_dir)

process_list=[]

for file in file_list:

fullfile=cur_dir+"\\"+file

if os.path.isfile(fullfile):

process_list.append(fullfile)

elif os.path.isdir(fullfile):

dir_extra_list=get_process_files(fullfile)

if len(dir_extra_list)!=0:

for x in dir_extra_list:

process_list.append(x)

return process_list

2.利用python-docx模块中的Document方法对word文件中每一段进行关键字匹配:

def search_word(filename,word):

#打开文档

document = Document(filename)

# document = Document(r'C:\Users\Cheng\Desktop\kword\words\wind.docx')

print filename

#读取每段资料

l = [ paragraph.text.encode('gb2312') for paragraph in document.paragraphs];

#输出并观察结果,也可以通过其他手段处理文本即可

for i in l:

i=i.strip()

# print i

if i.find(word)!=-1:

print filename, i

3.遍历每一个文件并进行查找:

def find_files(root_dir,word):

process_list=get_process_files(root_dir)

for files in process_list:

search_word(files, word)

这里有两个参数需要我们自己输入,分别是文件目录和关键字。

#文件根目录

root_dir=sys.argv[1]

#要搜索的关键字

word=sys.argv[2]

至此,在脚本目录下运行“python kword.py 目录 关键字”命令就可以看到搜索结果,目前搜索功能比较简单,没有做大量文件测试和算法优化。

献上脚本源码:

#coding=utf-8

from docx import Document

import os,sys

def search_word(filename,word):

#打开文档

document = Document(filename)

# document = Document(r'C:\Users\Cheng\Desktop\kword\words\wind.docx')

print filename

#读取每段资料

l = [ paragraph.text.encode('gb2312') for paragraph in document.paragraphs];

#输出并观察结果,也可以通过其他手段处理文本即可

for i in l:

i=i.strip()

# print i

if i.find(word)!=-1:

print filename, i

def get_process_files(root_dir):

"""process all files in directory"""

cur_dir=os.path.abspath(root_dir)

file_list=os.listdir(cur_dir)

process_list=[]

for file in file_list:

fullfile=cur_dir+"\\"+file

if os.path.isfile(fullfile):

process_list.append(fullfile)

elif os.path.isdir(fullfile):

dir_extra_list=get_process_files(fullfile)

if len(dir_extra_list)!=0:

for x in dir_extra_list:

process_list.append(x)

return process_list

def find_files(root_dir,word):

process_list=get_process_files(root_dir)

for files in process_list:

search_word(files, word)

if __name__=='__main__':

#文件根目录

root_dir=sys.argv[1]

#要搜索的关键字

word=sys.argv[2]

try:

find_files(root_dir,word)

except:

pass

如果你喜欢本文章,还请点个关注和喜欢,我会为大家不断地带来Python学习笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值