Python遍历目录查找文件内容

以前要修改wordpress模板上的具体内容时,总是把模板文件夹下载下来,通过sublime text打开文件夹,才能具体的查找到相关内容
当然linux通过grep也可以实现,但还是达不到自己想要的效果
于是用所学的pythoon生成器写了一个小程序
该程序能够查找文件夹下各个文件,并返回关键词所在行号、该行内容、文件所在地址

具体实现


#!/bin/python3
# -*- coding:utf-8 -*-
#modules
import os,sys
#functions
def init(func):
    ''' initialization generator functions '''
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        next(res)
        return res
    return wrapper
def get_filepath(keyword,dir_path):
    '''get file path'''
    path_list = os.walk(dir_path)
    file_path = ('%s/%s'%(x[0],y) for x in path_list for y in x[-1])
    for x in file_path:
        open_file(cat_file(print_file())).send((x,keyword))
@init
def open_file(target):
    '''open file send to  cat_file'''
    while True:
        path,keyword = yield
        with open(path,'r') as file_read:
            target.send((path,keyword,file_read))
@init
def cat_file(target):
    '''cat file content , grep by keyword,get keywork in line and send to print'''
    while True:
        count = 1
        path,keyword,file_read = yield
        for x in file_read:
            if keyword in x:
                target.send((path,x.strip(),count))
                count += 1
@init
def print_file():
    '''print keywork in which line\line content\file path'''
    while True:
        path,line,count = yield
        print("file:%s in line:\033[1;43m%s\033[0m found(%s)" %(path,count,line))
#main program
def main():
    if len(sys.argv) == 3:
        if os.path.isdir(sys.argv[2]):
            get_filepath(sys.argv[1],sys.argv[2])
        else:
            print("path must directory!")
    else:
        print("find.py [keyword] [directory path]")
#program entry
if __name__ == '__main__':
    main()

Leave a Reply

Your email address will not be published. Required fields are marked *