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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 Python
python实现点对点聊天程序
Jul 28 Python
使用Template格式化Python字符串的方法
Jan 22 Python
Python字符串的常见操作实例小结
Apr 08 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
如何通过Python实现标签云算法
Jul 02 Python
对于Python深浅拷贝的理解
Jul 29 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
通过python检测字符串的字母
Feb 18 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
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
BBS(php & mysql)完整版(七)
2006/10/09 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
Dom 结点创建 基础知识
2011/10/01 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Python获取当前时间的方法
2014/01/14 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
python logging 日志的级别调整方式
2020/02/21 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
JAVA高级程序员面试题
2013/09/06 面试题
预备党员思想汇报范文
2014/01/11 职场文书
出国导师推荐信
2014/01/16 职场文书
施工安全承诺书
2014/05/22 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang