Python实现的大数据分析操作系统日志功能示例


Posted in Python onFebruary 11, 2019

本文实例讲述了Python实现的大数据分析操作系统日志功能。分享给大家供大家参考,具体如下:

一 代码

1、大文件切分

import os
import os.path
import time
def FileSplit(sourceFile, targetFolder):
  if not os.path.isfile(sourceFile):
    print(sourceFile, ' does not exist.')
    return
  if not os.path.isdir(targetFolder):
    os.mkdir(targetFolder)
  tempData = []
  number = 1000
  fileNum = 1
  linesRead = 0
  with open(sourceFile, 'r') as srcFile:
    dataLine = srcFile.readline().strip()
    while dataLine:
      for i in range(number):
        tempData.append(dataLine)
        dataLine = srcFile.readline()
        if not dataLine:
          break
      desFile = os.path.join(targetFolder, sourceFile[0:-4] + str(fileNum) + '.txt')
      with open(desFile, 'a+') as f:
        f.writelines(tempData)
      tempData = []
      fileNum = fileNum + 1
if __name__ == '__main__':
  #sourceFile = input('Input the source file to split:')
  #targetFolder = input('Input the target folder you want to place the split files:')
  sourceFile = 'test.txt'
  targetFolder = 'test'
  FileSplit(sourceFile, targetFolder)

2、Mapper代码

import os
import re
import threading
import time
def Map(sourceFile):
  if not os.path.exists(sourceFile):
    print(sourceFile, ' does not exist.')
    return
  pattern = re.compile(r'[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}')
  result = {}
  with open(sourceFile, 'r') as srcFile:
    for dataLine in srcFile:
      r = pattern.findall(dataLine)
      if r:
        t = result.get(r[0], 0)
        t += 1
        result[r[0]] = t
  desFile = sourceFile[0:-4] + '_map.txt'
  with open(desFile, 'a+') as fp:
    for k, v in result.items():
      fp.write(k + ':' + str(v) + '\n')
if __name__ == '__main__':
  desFolder = 'test'
  files = os.listdir(desFolder)
  #如果不使用多线程,可以直接这样写
  '''for f in files:
    Map(desFolder + '\\' + f)'''
  #使用多线程
  def Main(i):
    Map(desFolder + '\\' + files[i])
  fileNumber = len(files)
  for i in range(fileNumber):
    t = threading.Thread(target = Main, args =(i,))
    t.start()

3.Reducer代码

import os
def Reduce(sourceFolder, targetFile):
  if not os.path.isdir(sourceFolder):
    print(sourceFolder, ' does not exist.')
    return
  result = {}
  #Deal only with the mapped files
  allFiles = [sourceFolder+'\\'+f for f in os.listdir(sourceFolder) if f.endswith('_map.txt')]
  for f in allFiles:
    with open(f, 'r') as fp:
      for line in fp:
        line = line.strip()
        if not line:
          continue
        position = line.index(':')
        key = line[0:position]
        value = int(line[position + 1:])
        result[key] = result.get(key,0) + value
  with open(targetFile, 'w') as fp:
    for k,v in result.items():
      fp.write(k + ':' + str(v) + '\n')
if __name__ == '__main__':
  Reduce('test', 'test\\result.txt')

二 运行结果

依次运行上面3个程序,得到最终结果:

07/10/2013:4634
07/16/2013:51
08/15/2013:3958
07/11/2013:1
10/09/2013:733
12/11/2013:564
02/12/2014:4102
05/14/2014:737

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
python安装教程
Feb 28 Python
python检索特定内容的文本文件实例
Jun 05 Python
python绘制直线的方法
Jun 30 Python
python 以16进制打印输出的方法
Jul 09 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
Python版中国省市经纬度
Feb 11 Python
Python中常用的高阶函数实例详解
Feb 21 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
python 中的jieba分词库
Nov 23 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 #Python
实例讲解Python中浮点型的基本内容
Feb 11 #Python
实例介绍Python中整型
Feb 11 #Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 #Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 #Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 #Python
Python requests模块实例用法
Feb 11 #Python
You might like
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php HandlerSocket的使用
2011/05/02 PHP
php实现的操作excel类详解
2016/01/15 PHP
降低PHP Redis内存占用
2017/03/23 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
asp 的 分词实现代码
2007/05/24 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
python解析文件示例
2014/01/23 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Python测试人员需要掌握的知识
2018/02/08 Python
python简单区块链模拟详解
2019/07/03 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
学生鉴定评语大全
2014/05/05 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python