python 超大txt 按行分块多线程读取

Posted bdd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 超大txt 按行分块多线程读取相关的知识,希望对你有一定的参考价值。

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

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,None): 
          print(self.n)
          if self.n <self.nlong:
              self.data.loc[self.n] = line.split(‘|‘)
          else:
              break
          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)

  

 

以上是关于python 超大txt 按行分块多线程读取的主要内容,如果未能解决你的问题,请参考以下文章

java 多线程读取txt 文件

PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)

Python 按行读取txt文件,如何去掉换行符"\n"

水文日常~~Python如何按行读取txt文件中的数据并去除每行末尾的回车符

水文日常~~Python如何按行读取txt文件中的数据并去除每行末尾的回车符

水文日常~~Python如何按行读取txt文件中的数据并去除每行末尾的回车符