小编给大家分享一下Python基于geven如何实现文件字符串查找器的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
我们提供的服务有:成都网站设计、做网站、微信公众号开发、网站优化、网站认证、施甸ssl等。为成百上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的施甸网站制作公司1、递归遍历目录下所有文件并通过finder函数定位指定格式字符串
2、用来查找字符串的finder函数是自己定义的,这里定义了一个ip_port_finder通过正则表达式查找ip:port格式(粗匹配:数字.数字.数字.数字:数字)的字符串
3、用gevent来实现协程并发完成耗时任务
代码如下:
# -*- coding: utf-8 -*- import re from os.path import join from os import walk from gevent import monkey import gevent monkey.patch_all() def ip_port_finder(str: str) -> bool: pattern = re.compile(r".+\d+\.\d+\.\d+\.\d+:\d+") matchObj = pattern.match(str) if matchObj: print("------") print(f"发现目标:{matchObj.group(0)}") return True else: return False def find_in_file(file_path, finder): with open(file_path, "r", encoding="utf-8", errors='ignore') as f: for (num, value) in enumerate(f): if finder(value): print(f"文件路径:{file_path}") print(f"所在行数:{num}") find_in_path_recursively = lambda path, finder: gevent.joinall( [gevent.spawn(find_in_file, join(root, file_name), finder) for root, directories, f_names in walk(path) for file_name in f_names]) if __name__ == '__main__': path = "E:\dev_codes\xxx" find_in_path_recursively(path, ip_port_finder)