Python基于gevent实现文件字符串查找器
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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Python的gevent框架的入门教程
Python通过yield提供了对协程的基本支持,但是不完全.而第三方的gevent为Python提供了比较完善的协程支持. gevent是第三方库,通过greenlet实现协程,其基本思想是: 当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行.由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO. 由于切换是在IO操作时自动完成,
-
Python并发编程协程(Coroutine)之Gevent详解
Gevent官网文档地址:http://www.gevent.org/contents.html 基本概念 我们通常所说的协程Coroutine其实是corporateroutine的缩写,直接翻译为协同的例程,一般我们都简称为协程. 在linux系统中,线程就是轻量级的进程,而我们通常也把协程称为轻量级的线程即微线程. 进程和协程 下面对比一下进程和协程的相同点和不同点: 相同点: 我们都可以把他们看做是一种执行流,执行流可以挂起,并且后面可以在你挂起的地方恢复执行,这实际上都可以看做是con
-
简单了解python gevent 协程使用及作用
简介 没有切换开销.因为子程序切换不是线程切换,而是由程序自身控制,没有线程切换的开销,因此执行效率高, 不需要锁机制.因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多 Python对协程的支持还非常有限,用在generator中的yield可以一定程度上实现协程. yield 传统的生产者-消费者模型是一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁. 如果改用协程,生产者生产消息后,直接通过y
-
在Python的gevent框架下执行异步的Solr查询的教程
我经常需要用Python与solr进行异步请求工作.这里有段代码阻塞在Solr http请求上, 直到第一个完成才会执行第二个请求,代码如下: import requests #Search 1 solrResp = requests.get('http://mysolr.com/solr/statedecoded/search?q=law') for doc in solrResp.json()['response']['docs']: print doc['catch_line'] #Sea
-
详解python之协程gevent模块
Gevent官网文档地址:http://www.gevent.org/contents.html 进程.线程.协程区分 我们通常所说的协程Coroutine其实是corporate routine的缩写,直接翻译为协同的例程,一般我们都简称为协程. 在linux系统中,线程就是轻量级的进程,而我们通常也把协程称为轻量级的线程即微线程. 进程和协程 下面对比一下进程和协程的相同点和不同点: 相同点: 相同点存在于,当我们挂起一个执行流的时,我们要保存的东西: 栈, 其实在你切换前你的局部变量,以及
-
Python使用grequests(gevent+requests)并发发送请求过程解析
前言 requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快.但是requests发送请求是串行的,即阻塞的.发送完一条请求才能发送另一条请求. 为了提升测试效率,一般我们需要并行发送请求.这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦. grequests是K神基于gevent+requests编写的一个并发发送请求的库,使用起来非常简单. 安装方法: pip install gevent grequests 项目地
-
python 协程 gevent原理与用法分析
本文实例讲述了python 协程 gevent原理与用法.分享给大家供大家参考,具体如下: gevent greenlet已经实现了协程,但是这个还的人工切换,是不是觉得太麻烦了,不要捉急,python还有一个比greenlet更强大的并且能够自动切换任务的模块gevent 其原理是当一个greenlet遇到IO(指的是input output 输入输出,比如网络.文件操作等)操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行. 由于IO操
-
Python基于gevent实现高并发代码实例
gevent是python的协程模块,协程可以理解成更轻量化的线程.因为性能测试工具的一些限制,就自己萌发了自己写性能测试工具的念想,当然,写的比较简单,比如缺少性能指标的收集,慢慢的优化 出来,这个只是为了拿出来练练手 import gevent import requests import time def get_res(url): res = requests.get(url) print(res.content.decode('utf-8')) if __name__ == '__ma
-
Python的网络编程库Gevent的安装及使用技巧
安装(以CentOS为例) gevent依赖libevent和greenlet: 1.安装libevent 直接yum install libevent 然后配置python的安装 2.安装easy_install (1) wget -q http://peak.telecommunity.com/dist/ez_setup.py (2)使用 python ez_setup.py (3)使用easy_install 查看命令是否可用,如果不可用可以讲路径加入到PATH中 3.安装greenlet
-
Python基于gevent实现文件字符串查找器
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
-
python基于gevent实现并发下载器代码实例
这篇文章主要介绍了python基于gevent实现并发下载器代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 并发下载原理 import gevent from gevent import monkey import urllib.request monkey.patch_all() def my_download(url): print('GET: %s' % url) resp = urllib.request.urlopen(url
-
Python基于正则表达式实现文件内容替换的方法
本文实例讲述了Python基于正则表达式实现文件内容替换的方法.分享给大家供大家参考,具体如下: 最近因为有一个项目需要从普通的服务器移植到SAE,而SAE的thinkphp文件结构和本地测试的有出入,需要把一些html和js的引用路径改成SAE的形式,为了不手工改,特地速成了一下Python的正则表达式和文件操作.主要要求是将某目录下的html和js里面的几个路径变量分别更改成相应的形式,匹配文件名的时候用了正则 import os import re #all file in the dir
-
Python基于checksum计算文件是否相同的方法
本文实例讲述了Python基于checksum计算文件是否相同的方法.分享给大家供大家参考.具体如下: 假设有2个二进制文件(0.bin, 1.bin),用checksum检验内容是否相同 # coding: utf8 # Python2.6.2 import md5 with open('0.bin', 'rb') as f: s = md5.new(f.read()).hexdigest() with open('1.bin', 'rb') as f: ss = md5.new(f.read
-
python基于FTP实现文件传输相关功能代码实例
这篇文章主要介绍了python基于FTP实现文件传输相关功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本实例有文件传输相关功能,包括:文件校验.进度条打印.断点续传 客户端示例: import socket import json import os import hashlib CODE = { '1001':'重新上传文件' } def file_md5(file_path): obj = open(file_path,'rb
-
python批量替换多文件字符串问题详解
系统如下: 操作系统 : CentOS7.3.1611_x64 Python 版本 : 2.7.5 问题描述 编码过程中有时候会遇到在多个源文件中存在同一个变量名(比如 : writeBuffer),需要替换为新的变量名(比如 : write_buffer)的问题. 怎么能方便快捷的解决该问题呢? 解决方案 使用sed sed和grep结合使用可以替换当前文件夹多个文件的内容. 格式 : sed -i 's/原字符串/新字符串/g' `grep -rl 原字符串 所在目录` 示例代码: sed
-
python基于paramiko将文件上传到服务器代码实现
python通过安装使用paramiko模块,将本地文件上传到服务器上 import paramiko import datetime import os hostname = '服务器ip' username = 'root' password = '服务器密码' port = 22#配置信息可以写到配置文件中 #loacl_file是要上传的本地文件路径 #remote_path是要上传到服务器上指定文件的路径 def upload(local_file, remote_path): try
-
Python基于文件内容实现查找文件功能
目录 文件查找操作 glob 的介绍 glob 的基本使用 查找指定的文件 基于文件内容查找文件 该章节将学习关于文件查找的操作,大家都知道,无论是 Linux 系统还是 Windows 系统都有基于文件名实现过滤.查找的功能.但是如果想要查找一些关于某些文件指定内容的文件,好像无论是 Linux 还是 Windows 明面上没有这样的功能了.这个时候就可以通过 Python 来实现这样的功能,通过该章节的学习,就可以学习到该功能的如何利用 Python 实现这样的操作. 文件查找操作 glob
-
Python基于二分查找实现求整数平方根的方法
本文实例讲述了Python基于二分查找实现求整数平方根的方法.分享给大家供大家参考,具体如下: x=int(raw_input('please input a int:')) if x<0: retrun -1 low=0 high=x ans=(low+high)/2.0 sign=ans while ans**2 !=x: if ans**2>x: high=ans else: low=ans ans=(low+high)/2.0 if sign==ans: break print ans
随机推荐
- ES6新增的math,Number方法
- JS对img标签进行优化使用onerror显示默认图像
- PHP获取mysql数据表的字段名称和详细信息的方法
- Android消息通知栏的实现方法介绍
- 基于逻辑运算的简单权限系统(实现) JS 版
- 深入剖析Go语言编程中switch语句的使用
- jdbc操作mysql数据库实例
- Android开发实现自定义水平滚动的容器示例
- Windows 8.1下MySQL5.7 忘记root 密码的解决方法
- Shell脚本bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录
- MYSQL速度慢的问题 记录数据库语句
- linux下实现ftp自动备份shell脚本
- ThinkPHP框架任意代码执行漏洞的利用及其修复方法
- mysql安全启动脚本mysqld_safe详细介绍
- jQuery中contents()方法用法实例
- jQuery实现密保互斥问题解决方案
- 实例讲解JavaScript中的this指向错误解决方法
- 关于winasse.exe生成Win59.exe等病毒的解决方法
- Android设置Activity背景为透明style的简单方法(必看)
- js 函数的副作用分析