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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
Python 3中的yield from语法详解
Jan 18 Python
python技能之数据导出excel的实例代码
Aug 11 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
python使用Flask操作mysql实现登录功能
May 14 Python
对PyTorch torch.stack的实例讲解
Jul 30 Python
利用python和百度地图API实现数据地图标注的方法
May 13 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 Python
keras.utils.to_categorical和one hot格式解析
Jul 02 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
python numpy中multiply与*及matul 的区别说明
May 26 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
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python3 replace()函数使用方法
2018/03/19 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python对csv文件追加写入列的方法
2019/08/01 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
小学生常见病防治方案
2014/06/06 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
预备党员介绍人意见
2015/06/01 职场文书
python xlwt模块的使用解析
2021/04/13 Python
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
Consul在linux环境的集群部署
2022/04/08 Servers