python 文件新增内容监控、关键字检索升级版

对原来文件内容监控、关键字检索的方法调整:
1、将原有的新增内容监控、关键字检索合二为一,通过参数type进行区分,type=-1,对新增内容检索;type=0,对全文内容检索

# coding:utf-8
'''
Note:
    文件内容检索、监控
Author:Qred
Date:2019/7/11
'''

import re
import time
import os


def GetFileNewKeyData ( File_Path, KeyWord , type = -1):
    '''
    检索文件。新增内容关键字匹配/全文关键字匹配,并输出结果
    :param File_Path: 文件路径
    :param KeyWord: 关键字
    :param type: 检索类型 -1 新增内容检索 0 全文检索
    :return:
    '''
    with open(File_Path) as f:
        # 获取文件结束位置
        f.seek(0, 2)
        End = f.tell()
        # 设置文件检索的起始位置
        if type == -1 :
            cur = End
            temp = 1  # 检索次数
        elif type == 0 :
            # f.seek(0, 0)
            cur = 0 #f.tell()
            temp = -1  # 检索次数

        count = 0 # 关键词匹配次数
        text = '' # 结果
        HelpInfoHead('NewKeyData', File_Path, End)
        while True:
            f.seek(cur)
            ch = f.readlines()
            # print ch
            # 如果没有读到数据,跳出循环
            if not ch:
                if HelpInfoEnd('NewKeyData', temp) == 'no':
                    break
            else:
	       
                for line in ch:
                    rs = re.search(KeyWord, line)
                    if rs:
                        count += 1
                        text += str(count) + '\t' + line
                HelpInfoContent(text, temp)
                print('[命中{count}次]'.format(count=count))
                if temp == -1:
                    temp -= 1

            temp += 1
            cur = f.tell()
        return count,text

'''
下面是为了优化输出效果做的调整
'''

def HelpInfoHead ( FuctionName, File_Path, bits=-1 ):
    '''
    提示信息——头部
    :param FuctionName:函数名
    :param file_name: 文件名
    :param bits: 当前文件结束地址
    :return:
    '''
    file_name = os.path.basename(File_Path)
    print(FuctionName)
    print('----------------------------------------------------------')
    print('Start Listen The File ({file_name}) Info ...'.format(file_name=file_name))
    if bits != -1:
        print('The File Ends in {bits} bits . '.format(bits=bits))
    print('//')


def HelpInfoEnd ( FuctionName, times=-1 ):
    '''
    提示信息——尾部
    :return: no 结束 yes 继续
    '''
    if times == -1:
        raw = 'no'
    else:
        print('Check {times} times. '.format(times=times))
        raw = raw_input('Continue Check The File Key Info (yes/no): ')

    print('No {FuctionName} in {clock}'.format(FuctionName=FuctionName, clock=GetTime()))

    if raw == 'no' or raw == 'NO':
        print('check finish !')
        print('----------------------------------------------------------')
        sign = 'no'
    else:
        sign = 'yes'

    return sign


def HelpInfoContent ( text, times=0 ):
    '''
    输出检索出的配置的内容
    :param text: 匹配的内容
    :param times: 检索的次数
    :return:
    '''
    print('**********************************************************')
    if times != 0:
        print('Check {times} times. '.format(times=times))
    print('Changed at {times} content: \n{text}'.format(
        times=GetTime(), text=text))
    print('**********************************************************')


def GetTime ():
    '''
    返回当前时间
    :return:
    '''
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))


# GetFileNewKeyData ( 'projectlist.txt', 'server' , 0)

你可能感兴趣的:(测试)