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 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
Python的re模块正则表达式操作
May 25 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
python更改已存在excel文件的方法
May 03 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
Django 中间键和上下文处理器的使用
Mar 17 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
python画图--输出指定像素点的颜色值方法
Jul 03 Python
Django model update的多种用法介绍
Mar 28 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
在keras里实现自定义上采样层
Jun 28 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面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
js 操作css实现代码
2009/06/11 Javascript
javascript call方法使用说明
2010/01/11 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
Python数据结构之Array用法实例
2014/10/09 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
python如何统计序列中元素
2020/07/31 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
电大会计学自我鉴定
2014/02/06 职场文书
岗位职责风险防控
2014/02/18 职场文书
环保建议书200字
2014/05/14 职场文书
招商引资工作汇报
2014/10/28 职场文书
五好家庭申报材料
2014/12/20 职场文书
MySQL实现配置主从复制项目实践
2022/03/31 MySQL