python多线程读取文件内容_python 超大txt 按行分块多线程读取

首先:使用ultra edit 打开获取txt行数;

然后:确定开启的线程数量,计算每个线程读取txt的行数设置为n_size

import time, threading

import pandas as pd

from itertools import islice

'''

Reader类,继承threading.Thread

@__init__方法初始化

@run方法实现了读文件的操作

'''

class Reader(threading.Thread):

def __init__(self, file_name, n, nlong):

super(Reader, self).__init__()

self.file_name = file_name

self.n = n

self.nlong = nlong

self.data = pd.DataFrame(columns=[

'发展渠道编码(全渠道)','发展渠道名称','客户id(脱敏后的移动用户识别码)','年龄','性别','产品名称(201907)','档位(201907)','出账收入(201907)','产品名称(201908)','档位(201908)','出账收入(201908)','产品名称(201909)','档位(201909)','出账收入(201909)','产品名称(201910)','档位(201910)','出账收入(201910)','产品名称(201911)','档位(201911)','出账收入(201911)','产品名称(201912)','档位(201912)','出账收入(201912)','入网时间','离网时间取唯一标识','2019年7月','工作地的经纬度网格','2019年7月居住地的经纬度网格','2019年8月工作地的经纬度网格','2019年8月居住地的经纬度网格','2019年9月工作地的经纬度网格','2019年9月居住地的经纬度网格','2019年10月工作地的经纬度网格','2019年10月居住地的经纬度网格','2019年11月工作地的经纬度网格','2019年11月居住地的经纬度网格','2019年12月工作地的经纬度网格','2019年12月居住地的经纬度网格','2019年11月每个周六10:00-15:00出现频次最多位置的经纬度网格','2019年11月每个周日10:00-15:00出现频次最多位置的经纬度网格','2019年12月每个周六10:00-15:00出现频次最多位置的经纬度网格','2019年12月每个周日10:00-15:00出现频次最多位置的经纬度网格'])

def run(self):

for line in islice(open(self.file_name,'r',encoding='utf-8'),self.n,self.nlong):

print(self.n)

self.data.loc[self.n] = line.split('|')

self.n = self.n+1

return self.data

if __name__ == '__main__':

file_name = r'E:\work\渠道规划\2020年联通营业厅规划\甲方数据\移网话单数据.rar,北京渔网-面.rar,字段名称.xlsx\移网话单数据\YYT_ZHB1.txt'

#线程数量

thread_num = 500

#起始时间

start_time = time.clock()

#txt按行切分n_start 起始行,n_end 终止行,n_size 切分行数

n_size= 33101

n_start = [x*n_size for x in range(thread_num)]

n_end = [(x+1)*n_size for x in range(thread_num)]

t = []

#生成线程

for i in range(thread_num):

t.append(Reader(file_name, n_start[i],n_end[i]))

#开启线程

for i in range(thread_num):

t[i].start()

for i in range(thread_num):

t[i].join()

#结束时间

end_time = time.clock()

print ("Cost time is %f" % (end_time - start_time))

data = pd.DataFrame(columns=[

'发展渠道编码(全渠道)','发展渠道名称','客户id(脱敏后的移动用户识别码)','年龄','性别','产品名称(201907)','档位(201907)','出账收入(201907)','产品名称(201908)','档位(201908)','出账收入(201908)','产品名称(201909)','档位(201909)','出账收入(201909)','产品名称(201910)','档位(201910)','出账收入(201910)','产品名称(201911)','档位(201911)','出账收入(201911)','产品名称(201912)','档位(201912)','出账收入(201912)','入网时间','离网时间取唯一标识','2019年7月','工作地的经纬度网格','2019年7月居住地的经纬度网格','2019年8月工作地的经纬度网格','2019年8月居住地的经纬度网格','2019年9月工作地的经纬度网格','2019年9月居住地的经纬度网格','2019年10月工作地的经纬度网格','2019年10月居住地的经纬度网格','2019年11月工作地的经纬度网格','2019年11月居住地的经纬度网格','2019年12月工作地的经纬度网格','2019年12月居住地的经纬度网格','2019年11月每个周六10:00-15:00出现频次最多位置的经纬度网格','2019年11月每个周日10:00-15:00出现频次最多位置的经纬度网格','2019年12月每个周六10:00-15:00出现频次最多位置的经纬度网格','2019年12月每个周日10:00-15:00出现频次最多位置的经纬度网格'])

for i in t:

data = data.append(i.data)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值