python怎么分块,python分块读文件

一、思路

分块读取文件的所有内容,按块为单位存入到队列中(块的大小=文件的总行数/线程数)

每个线程从队列中读数据(当然单位是原来的块)

如何实现分块读???

定义一个列表A,该列表存储每一个块的起始和终止位置。

根据列表A的元素(元素为列表,存储每一个块的起始和终止位置),读取文件,并将内容存储至队列(该队列为全局变量)中。

全部代码

import threading

import time

import queue

class Reader(threading.Thread):

def __init__(self,Thread_id):

super(Reader, self).__init__()

self.Thread_id=Thread_id

def run(self):

global q

temp_list=q.get()

for text in temp_list:

colums=text.split('\n')

print ("Thread_id",self.Thread_id,' get了:',colums)

class PartionFile:

def __init__(self,file_name,thread_num):

self.file_name=file_name

self.block_num=thread_num

def partqueue(self):

pos_list=[]

file_size=self.getLines() #

block_size=file_size/self.block_num

global q

start_pos=0

for i in range(self.block_num): #总共需记录线程数个位置对

if i==self.block_num-1: #如果是文件的最后一块内动,则其end_pos=file_size-1

end_pos=file_size-1

pos_list.append((start_pos,end_pos))

break

end_pos=start_pos+block_size-1

if end_pos>=file_size:

end_pos=file_size-1

if start_pos>=file_size:

break

pos_list.append((start_pos, end_pos))

start_pos=end_pos+1

fd=open(self.file_name)

for pos_item in pos_list: #根据位置对读源文件并把文件内容存储到队列中

temp_text=[]

start=pos_item[0]

end=pos_item[1]

while start<=end:

text=fd.readline().strip('\n')

temp_text.append(text)

start=start+1

q.put(temp_text)

fd.close

def getLines(self): #获取一个文件有多少行

count=0

fo=open(self.file_name,'r')

for line in fo.readlines():

count=count+1

# print (count)

fo.close()

return count

if __name__=='__main__':

file_name='sing.txt'

q = queue.Queue()

thread_num=4

p=PartionFile(file_name, 4)

p.partqueue()

t=[]

for i in range(thread_num):

t.append(Reader(i))

for i in range(thread_num):

t[i].start()

for i in range(thread_num):

t[i].join()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值