zoukankan      html  css  js  c++  java
  • 面向过程---通过查找字符串,找到相应的文件路径

    命令 grep  -rl  'python'  路径  :在一个目录下面找到含有字符串 python 内容的文件

    通过一个命令来实现查找字符串的效果

     一装饰器:给生成器一个初始化

    def init(func):
        def inner(*args,**kwargs):
            res=func(*args,**kwargs)
            next(res) #装饰器初始化一次
            return res
        return inner

    二 拿到文件下所有文件的绝对路径

    @init
    def search(target):
        while True:
            filepath=yield
            g = os.walk(filepath)  # 生成器
            for pardir,_,files in g:
                for file in files:
                    abs_path=r'%s\%s'%(pardir,file)
                    target.send(abs_path)

    三 打开文件拿到文件对象

    @init
    def opener(target):
        while True:
            abs_path=yield
            # print('opener func--->',abs_path)
            with open(abs_path,'rb') as f:
                #把 abs_path,f 传给下一个阶段
                target.send((abs_path,f))

    四 读取文件的每行内容

    @init
    def cat(target):
        while True:
           abs_path, f=yield
           for line in f:
               res=target.send((abs_path,line))
               if res:
                   break

    五判断字符是否在里面

    @init
    def grep(target,pattern):
        pattern = pattern.encode('utf-8')
        res=False #作用:变量要用的话先定义
        while True: #一直循环前面文件传过来的值
            abs_path,line=yield res #yield后面是传的值
            res=False #保证判断之前res都为False
            if pattern in line:
                res=True #改变了res的值
                target.send(abs_path)

    六打印最终的文件路径

    @init
    def printer():
        while True:
            abs_path=yield
            print('<%s>'%abs_path)
    
    g=search(opener(cat(grep(printer(),'python'))))
    g.send(r'G:studyday09a')

    七执行需要的查找命令

    g=search(opener(cat(grep(printer(),'python'))))
    g.send(r'G:studyday09a')
  • 相关阅读:
    手写redux
    require.context
    webpack cdn加速
    spy-debugger安装、调试步骤
    MAC设置应用在127.0.0.1:80
    javascript数据结构——栈
    Immutable.js了解一下?
    自己搭建服务器.并返回结果
    vue-cli2与vue-cli3在一台电脑共存
    JavaScript点击事件-一个按钮触发另一个按钮
  • 原文地址:https://www.cnblogs.com/mmyy-blog/p/9298555.html
Copyright © 2011-2022 走看看