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 13 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
python实现反转部分单向链表
Sep 27 Python
分析经典Python开发工程师面试题
Apr 08 Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
python__name__原理及用法详解
Nov 02 Python
Python正则表达式学习小例子
Mar 03 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 Python
Python获取百度热搜的完整代码
Apr 07 Python
Python字符串的转义字符
Apr 07 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中防止伪造跨站请求的小招式
2011/09/02 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
python 生成目录树及显示文件大小的代码
2009/07/23 Python
在Python中操作字典之update()方法的使用
2015/05/22 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
pandas对指定列进行填充的方法
2018/04/11 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
在django模板中实现超链接配置
2019/08/21 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
先进集体获奖感言
2014/02/13 职场文书
校庆接待方案
2014/03/18 职场文书
灰雀教学反思
2014/04/28 职场文书
培训计划通知
2015/07/15 职场文书