Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法


Posted in Python onAugust 23, 2019

废话不多说,直接上代码吧!

import threading
import os
 
class Find(threading.Thread): #搜索数据的线程类
 def __init__(self,datalist,startIndex,endIndex,searchstr,savefile): #datalist要搜索的内容列表,startIndex列表搜索范围的开始下标,searchstr要搜索的内容
  threading.Thread.__init__(self)
  self.datalist=datalist #要搜索的数据的内存地址
  self.startIndex=startIndex #开始的索引
  self.endIndex=endIndex #结束的索引
  self.seachstr=searchstr #需要搜索的数据
  self.savefile=savefile
 def run(self):
 	self.findlist=[]
 	for i in range(self.startIndex,self.endIndex):
  	line=self.datalist[i].decode("gbk","ignore") #读取一行
  	if line.find(self.seachstr)!=-1:
  		print(self.getName(),line,end="") #搜索数据
  		self.findlist.append(line)
 	global mutex #多线程共享全局变量(全局锁)
 	with mutex: #获取锁(自动释放锁)
 		for line in self.findlist:
 			self.savefile.write(line.encode("gbk"))
  	
 
mutex=threading.Lock() #创建一个锁
savefile=open("c:\\zhaodao.txt","wb") #搜索到的内容写入该文件
 
path = "C:\\data1.txt" #要搜索的文件
file = open(path, "rb")
datalist = file.readlines() # 全部读入内存
lines=len(datalist) #所有的行数
searchstr=input("输入要查询的数据")
N=10 #开启10个线程
threadlist=[] #线程列表
# 97 9 0-1000000 1000000-2000000 2000000-3000000
for i in range(0,N-1): #0,1,2,3,4,5,6,7,8 数据切割
 mythd= Find(datalist,i*(lines//(N-1)) , (i+1)*(lines//(N-1)),searchstr,savefile) # //表示整除
 mythd.start()
 threadlist.append(mythd) #添加到线程列表
 
#97 = 97//10*10=90
mylastthd= Find(datalist,lines//(N-1)*(N-1),lines,searchstr,savefile) #最后的线程搜索剩下的尾数
mylastthd.start()
threadlist.append(mylastthd) #添加到线程列表
 
for thd in threadlist: #遍历线程列表
 thd.join()
print("finish")

以上这篇Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python创建列表并给列表赋初始值的方法
Jul 28 Python
Python运算符重载详解及实例代码
Mar 07 Python
Python面向对象编程基础解析(二)
Oct 26 Python
python中lambda()的用法
Nov 16 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
wxPython色环电阻计算器
Nov 18 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
django 实现简单的插入视频
Apr 07 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
详解Python牛顿插值法
May 11 Python
宝塔更新Python及Flask项目的部署
Apr 11 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 #Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 #Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 #Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 #Python
自定义django admin model表单提交的例子
Aug 23 #Python
django admin 自定义替换change页面模板的方法
Aug 23 #Python
解决python多行注释引发缩进错误的问题
Aug 23 #Python
You might like
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
php自动加载autoload机制示例分享
2014/02/20 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
Python中的闭包总结
2014/09/18 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python实现学生管理系统
2018/01/11 Python
python如何定义带参数的装饰器
2018/03/20 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
python中join()方法介绍
2018/10/11 Python
Keras 使用 Lambda层详解
2020/06/10 Python
浅析Python 条件控制语句
2020/07/15 Python
python 多线程中join()的作用
2020/10/29 Python
python 制作简单的音乐播放器
2020/11/25 Python
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
应届行政管理专业个人自我评价
2013/12/28 职场文书
总裁办公室主任职责
2014/01/02 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
国家助学金受助感言
2015/08/01 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
Java内存模型之happens-before概念详解
2021/06/13 Java/Android