前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 超大文件分析map_async seek

python 超大文件分析map_async seek

作者头像
葫芦
发布2019-04-17 14:53:34
7720
发布2019-04-17 14:53:34
举报
文章被收录于专栏:葫芦
代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/9/16 上午2:00
# @Author  : BrownWang
# @Email   : 277215243@qq.com
# @File    : Analysis.py
# @Software: PyCharm
import re
import heapq
import threading
from multiprocessing import Pool


dic={}
fdic={}
def readconfig():
    with open('./ipdb_cn.txt',mode='r') as f:
        for i in f:
            nn=i.split()
            tn= nn[2].decode('utf-8')
            if dic.has_key(tn):
                dic[tn].add('.'.join(nn[0].split('.')[0:3]))
            else:
                dic[tn]=set()
                dic[tn].add('.'.join(nn[0].split('.')[0:3]))
                fdic[tn]=0


t=threading.Thread(target=readconfig)
t.start()

tf=open('./flowdata.log','r')
tf.seek(0,2)
total=tf.tell()

def run(arg):
    start=arg[0]
    end=arg[1]

    with open('./flowdata.log','r') as f:
        sets=set()
        f.seek(start,0)
        for i in f:
            if f.tell() > end:
                return sets
            if '_ip' in i:
                sets.add(re.findall(r'_ip:\s*(\d+\.\d+\.\d+)\.\d+',i)[0])
        return sets
p=Pool(8)
runl=[]
for i in range(8):
    runl.append((total*i/8,total*(i+1)/8))
result=p.map_async(run,runl)
p.close()
p.join()
fil=[]
results=result.get()
for i in results:
    fil+=i

filset=set(fil)
sumfil=len(filset)
t.join()
for k in dic:
    for i in filset:
        if i in dic[k]:
            fdic[k]+=1
ret=[{'n':k,'v':fdic[k]/float(sumfil)*100} for k in fdic]
sortl=heapq.nlargest(len(ret),ret,key=lambda s:s['v'])
for i in sortl:
    print i['n'] + '   ' + str(round(i['v'],2))+'%'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档