python3查找文件中指定字符串_Python3在指定路径下递归定位文件中出现的字符串...

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

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

用到的python特性:

代码如下:

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])

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

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTguY25ibG9ncy5jb20vYmxvZy83MTQyNjMvMjAxODAzLzcxNDI2My0yMDE4MDMyOTEzMjg0MjQ2Mi0yMTQzODM2Njc3LnBuZw==.jpg

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

Android Studio:Failed to resolve ***

更换电脑后,也更新了所有的SDK的tool,仍然报错:Failed to resolve  各种jar包,出现这种问题主要是因为在Android studio中默认不允许在线更新,修改方法如下:

二维RMQ

求二维ST表 ;k<=;k++) ;l<=;l++) ;i<=n;i++) ;j<=m;j++){ <<(l-)),m+),tx=min(n+,i+(<&lt ...

NOI 银河英雄传说

并查集水题,记录祖先,大小和深度即可,每次用祖先的大小和深度更新后代的深度. #include #include #include &l ...

python3代码

import urllib.request url="http://mm.taobao.com/json/request_top_list.htm?type=0&page=1&quo ...

64位Win2008&lowbar;VS2012使用ODP&period;NET遭遇问题和解决办法

原文地址:64位Win2008_VS2012使用ODP.NET遭遇问题和解决办法 最近为使用Oracle11G数据库做个快速开发的小程序,使用64位Win2008+Vs2012环境,结果碰壁连环,幸好 ...

Entity Framework连接postgresql,code first

官方介绍地址 http://www.npgsql.org/ef6/index.html 首先创建一个控制台应用程序 ,本例居于.NETFramework,Version=v4.6.1 安装包 Enti ...

codeforces &num;530 D&lpar;Sum in the tree&rpar; &lpar;树上贪心&rpar;

Mitya has a rooted tree with nn vertices indexed from 11 to nn, where the root has index 11. Each ve ...

NOIP模拟 candy

题目描述 一天,小 DD 决定买一些糖果.他决定在两家不同的商店中买糖果,来体验更多的口味. 在每家商店中都有 nn 颗糖果,每颗糖果都有一个权值:愉悦度,代表小 DD 觉得这种糖果有多好吃.其中,第 ...

asp&period;net&plus;mvc&plus;easyui&plus;sqlite 简单用户系统学习之旅(一)—— 手把手教你创建第一个三层架构&plus;mvc的asp&period;net项目

下面开启项目 1. 打开vs2010-文件-新建项目 2. 先创建一个空的解决方案: 选择其他项目类型-visual studio 解决方案-空白解决方案(默认.NET Framework 4),项目 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值