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中的字符串与字符串的输入输出
Mar 13 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
python基于物品协同过滤算法实现代码
May 31 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
Python3.5装饰器典型案例分析
Apr 30 Python
安装好Pycharm后如何配置Python解释器简易教程
Jun 28 Python
使用python模拟命令行终端的示例
Aug 13 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
python 消费 kafka 数据教程
Dec 21 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 11 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
PHP实现阿里大鱼短信验证的实例代码
2017/07/10 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
2010年最佳jQuery插件整理
2010/12/06 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
jQuery.parseJSON()函数详解
2019/02/28 jQuery
原生JavaScript实现进度条
2021/02/19 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
Python原始字符串(raw strings)用法实例
2014/10/13 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
教育实习生的自我评价分享
2013/11/21 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
党员违纪检讨书
2015/05/05 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers