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中的自省(反射)详解
Jun 02 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
python实现机器人行走效果
Jan 29 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
Jul 04 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
TensorFlow tensor的拼接实例
Jan 19 Python
python模拟点击网页按钮实现方法
Feb 25 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
在Mac中配置Python虚拟环境过程解析
Jun 22 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-msf源码详解
2017/12/25 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
简单实现js浮动框
2016/12/13 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
python多进程间通信代码实例
2019/09/30 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
怎样写留学自荐信
2013/11/11 职场文书
求职自我推荐信
2014/06/25 职场文书
驻村工作简报
2015/07/20 职场文书
如何写通讯稿
2015/07/22 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书