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中的字典详细介绍
Sep 18 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
python操作sqlite的CRUD实例分析
May 08 Python
星球大战与Python之间的那些事
Jan 07 Python
python实现定时提取实时日志程序
Jun 22 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
python多进程下的生产者和消费者模型
May 07 Python
使用Python防止SQL注入攻击的实现示例
May 21 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
python归并排序算法过程实例讲解
Nov 04 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制作静态网站的模板框架(一)
2006/10/09 PHP
php session 预定义数组
2009/03/16 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
python开启多个子进程并行运行的方法
2015/04/18 Python
Flask之flask-session的具体使用
2018/07/26 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
django 信号调度机制详解
2019/07/19 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
康拓普公司Java笔面试
2016/09/23 面试题
信访工作者先进事迹
2014/01/17 职场文书
综合内勤岗位职责
2014/04/14 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
python正则表达式re.search()的基本使用教程
2021/05/21 Python
Python操作CSV格式文件的方法大全
2021/07/15 Python