Python文本操作---多线程读写

1.导入threading模块:线程

2.步骤:读取数据放入内存(readlines)---->检索符合的数据(Find)---->搜索到数据添加入列表(findlist[])---->数据写入文本中

#coding=utf-8
import threading
import os

class Find(threading.Thread):
    def __init__(self,kaifanglist,istart,iend,searchstr,savefile):
        threading.Thread.__init__(self)
        self.kaifanglist=kaifanglist  #开放数据的内存地址
        self.istart=istart  #开始的索引
        self.iend=iend    #结束的索引
        self.seachstr=searchstr  #需要搜索的数据
        self.savefile=savefile #保存
    def  run(self):
        self.findlist=[]
        for  i in range(self.istart,self.iend):
            line=self.kaifanglist[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("utf-8"))#写入

mutex=threading.Lock() #创建一个锁
savefile=open("C:\\Users\\pc\\Desktop\\zhaolin.txt","wb")

path = "C:\\Users\\pc\\Desktop\\kaifangX.txt"
file = open(path, "rb")
kaifanglist = file.readlines()  # 全部读入内存
lines=len(kaifanglist)#所有的行数
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(kaifanglist,i*(lines//(N-1)),(i+1)*(lines//(N-1)),searchstr,savefile)
    mythd.start()
    threadlist.append(mythd)

#97 =  97//10*10=90
mylastthd= Find(kaifanglist,lines//(N-1)*(N-1),lines,searchstr,savefile)
mylastthd.start()
threadlist.append(mylastthd)

for  thd in threadlist:
    thd.join()

print("finish")
savefile.close() #关闭
​
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值