[本文出自天外归云的博客园]

脚本功能:在指定的路径下递归搜索,找出指定字符串在文件中出现的位置(行信息)。

用到的python特性:

1. PEP 318 -- Decorators for Functions and Methods

2. PEP 380 -- Syntax for Delegating to a Subgenerator

3. PEP 471 -- os.scandir() function -- a better and faster directory iterator

4. PEP 498 -- Literal String Interpolation

代码如下:

import os
import sys __all__ = ['DirPath'] '''
在指定路径下递归查找包含指定字符串的文件
可以指定查找的文件类型category-默认为'.py'
可以指定查找的字符串str-默认为'python'
''' class DirPath(object):
# 初始化参数查找路径-path
def __init__(self, path):
self.show = self.show()
self.path = path # 开启func协程的装饰器
def on(func):
def wrapper(*args):
res = func(*args)
next(res)
return res return wrapper @on
# 搜索path路径下的python文件
def search(self, target, category):
while True:
path = yield
for entry in os.scandir(path):
if entry.is_file():
if entry.name.endswith(category):
target.send(entry.path)
if entry.is_dir():
self.search(target, category).send(entry.path) @on
# 找到f文件中包含str的行信息并发送给target
def find_str(self, target, str):
while True:
path = yield
with open(path, "r", encoding='utf-8') as f:
for (name, value) in enumerate(f):
if str in value:
target.send(f"[{path}][{name+1}]:{value}") @on
# 展示查询结果
def show(self):
while True:
res = yield
print(res) # 默认在'.py'类型文件中查找字符串-可以指定文件类型category
# 默认查找字符串'python'-可以指定查找字符串str
def code_search(self, category=".py", str="python"):
self.search(self.find_str(self.show, str), category).send(self.path) if __name__ == '__main__':
path = sys.argv[1]
Dir = DirPath(path)
Dir.code_search(str=sys.argv[2], category=sys.argv[3])

本地运行脚本,搜索结果示例如下:

Python3在指定路径下递归定位文件中出现的字符串的更多相关文章

  1. python之实现循环查看指定路径下的所有文件---os.walk

    循环查看指定路径下的所有文件.文件夹,包含隐藏文件注:“.filename” 以点开头的是隐藏文件 import os for cur_path,cur_dirs,cur_files in os.wa ...

  2. Python小代码_15_遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间

    遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间 import osimport datetime def print_tree(dir_path): for ...

  3. Python —— 批量替换指定目录下的所有文件中指定字符串

    参考:http://blog.csdn.net/zcwfengbingdongguke/article/details/13951527 代码: #!/usr/bin/python import os ...

  4. nodejs 获取指定路径下所有的文件夹名

    示例:获取 ./components 下所有的文件夹名称 let components = [] const files = fs.readdirSync('./components') files. ...

  5. 封装的方法--读取任何路径下的properties文件中的值

    概述:我们在做项目时,经常需要从某个properties文件中读取properties文件中的值.现在我封装了一下方法,直接读取配置文件中的值. 代码如下所示: /** * Created by qi ...

  6. linux下使用grep在当前目录下搜索所有文件中含有的字符串

    grep -r yourstr ./ 举例: grep -r sprintf ./ (在当前目录下递归查找含有字符串sprintf的文件)

  7. Linux系统下,在文件中查找某个字符串

    在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车. Vim会跳转到第一个匹配.按下n查找下一个,按下N查找上一个. Vim查找支持正则表达式,例如/vim$匹配行尾的" ...

  8. 【Lua】关于遍历指定路径下所有目录及文件

    关于Lua中如何遍历指定文件路径下的所有文件,需要用到Lua的lfs库. 首先创建一个temp.lua文件,用编辑器打开: 要使用lfs库,首先需要把lfs库加载进来 require("lf ...

  9. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

随机推荐

  1. Linux下Valgrind的使用概述 来源:Linux社区 作者:dndxhej

    本地使用情况,在Ubantu系统上编写的测试性能: 1,下载:sudo apt-get install valgrind; 2,验证是否安装成功:试着valgrind ls -l来检测是否正常工作: ...

  2. linux运维常见英文报错中文翻译(菜鸟必知)

    linux常见英文报错中文翻译(菜鸟必知) 1.command not found  命令没有找到 2.No such file or directory  没有这个文件或目录 3.Permissio ...

  3. 我的学习工作经历,一个园林专业中专毕业生的IT之路 学习编程 创业

    我的学习工作经历,一个园林专业中专毕业生的IT之路 魏琼东,男,1983年生人,祖籍甘肃陇南人,首先得感谢我父亲给我取了这么一个好名字,至少我非常喜欢他,因为目前还没有发现和我同名的人. 我是1998 ...

  4. Linux 操作MySQL常用命令行(转)

    注意:MySQL中每个命令后都要以分号:结尾. 1.显示数据库 mysql> show databases; +----------+ | Database | +----------+ | m ...

  5. UNIX 家族及Linux

    Unix成长为一个非私有的操作系统,是因为1956年的AT&T公司受命于联邦去经营电报电话服务.当然也可以开发软件,甚至那个软件可以有”合理”收费的许可证,但是这个公司却被禁止从事任何和计算机 ...

  6. Android 关于导航栏(虚拟按键)遮挡PopupWindow底部布局的问题

    我们自定义popupWindow的时候,一般会设置这些参数 setContentView(contentView); //设置高度为屏幕高度 setWidth(UIUtils.getScreenHei ...

  7. SIMULINK的模块库介绍

    SIMILINK模块库按功能进行分为以下8类子库:Continuous(连续模块)Discrete(离散模块)Function&Tables(函数和平台模块)Math(数学模块)Nonline ...

  8. Java 8 – TemporalAdjusters examples

    1. TemporalAdjusters Example to move a date to firstDayOfMonth, firstDayOfNextMonth, next Monday and ...

  9. elk 使用中遇到的问题(kafka 重复消费)

    问题描述: 在使用过程中,当遇到大量报错的时候,我们到eagle后台看到报错的那个consumer的消费情况到到lag 远远大于0(正常情况应该为0),activie  节点没有,kibana面板上没 ...

  10. Atitit 转移特效attilax总结

    Atitit 转移特效attilax总结 总结一般从按钮,转移到大点的方框上回比较好看点.. <!--jq ui--> <style type="text/css" ...