文档章节

使用Python处理硬盘数据日志

开心613
 开心613
发布于 2015/03/25 23:07
字数 653
阅读 58
收藏 0
使用python的多线程,多进程来处理硬盘测试中产生的批量数据,分析duplicate数量,可运行,结果ok,就是速度一般般。
解析每一行的数据过程,仅作工程中使用,不具有代表性。


from sys import argv
from os.path import exists
from multiprocessing import Pool
from time import sleep
import os
import multiprocessing
import threading
import time
"""refer link:
http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html
http://www.cnblogs.com/vamei/archive/2012/10/12/2721484.html
"""
def getFileList(directryName):
    if os.path.isdir(directryName):
        listFile=os.listdir(directryName)
        #print listFile
        return listFile
def threadTest(str,lock):
    lock.acquire()
    print str
    lock.release()
#Multi_thread
def multiThread():
    record = []
    lock = threading.Lock()
    for i in range(5):
        thread = threading.Thread(target = threadTest,args =(i,lock))
        thread.start()
        record.append(thread)
    for thread in record:
        thread.join()
def multiThreadForDuplicateCheck():
    start = time.clock()
    record = []
    directory = raw_input("Enter directory name\n")
    for (path,dirs,files) in os.walk(directory):
        #fileList = getFileList(path)
        for fileName in  files:
            #print os.path.splitext(fileName)[1]
            if os.path.splitext(fileName)[1] == '.txt':
                fileName = path+'\\'+fileName
                thread = threading.Thread(target = DuplicateCheck,args =(fileName,))
                thread.start()
                record.append(thread)
        for thread in record:
            thread.join()
        elapsed = (time.clock() - start)
        print ("Muliti thread Time used:",elapsed)
#Multi_process 
def multiProcessForDuplicateCheck():
    start = time.clock()
    record = []
    directory = raw_input("Enter directory name\n")
    for (path,dirs,files) in os.walk(directory):
        #fileList = getFileList(path)
        for fileName in  files:
            #print os.path.splitext(fileName)[1]
            if os.path.splitext(fileName)[1] == '.txt':
                fileName = path+'\\'+fileName
                process = multiprocessing.Process(target = DuplicateCheck,args=(fileName,))
                process.start()
                record.append(process)
    for process in record:
        process.join()
    elapsed = (time.clock() - start)
    print ("Muliti process Time used:",elapsed)
#duplicate check function   
def DuplicateCheck(fileName):   
    firstLine = 0     
    asatWriteDone = 0
    asatWriteGLogCnt = 0
    asatWriteCylList = []
    asatReadDone = 0
    asatReadGLogCnt =0
    asatReadCylList = []
    #fileName = 'C:/Users/xlian/Downloads/rawdata (20)/EZ08D1XM.txt'
    #fileName = raw_input("Enter file to decode")
    f = open(fileName,'r')
    #A:read all lines if file is small,if too big,change to B
    """allLines = f.readlines()
    f.close()
    for eachLine in allLines:
        print eachLine
    """
    #B:Read line by line using file iterator
    for eachLine in f:
        if firstLine == 0:
            SN = eachLine[7:16].strip()
            firstLine = 1
        #print eachLine
        #splitStr = eachLine.split('  ')
        if "F:47" in eachLine:
            asatWriteGLogCnt +=1
            #print eachLine
            #asatWriteCylList.append(eachLine[:}
            asatWriteCylList.append(eachLine[0:12].strip()+eachLine[13:15].strip()+eachLine[23:26].strip())
        
        if "0x2e" in eachLine:
            if asatWriteDone == 0:
                asatWriteDone = 1 # asat write increase done
            elif asatWriteDone == 1:
                asatWriteDone = 2 # asat write descrease done
            else:
                pass
        if asatWriteDone == 2:
            if "0x2b" in eachLine:
                asatReadDone = 1 #Asat Read log check done
            if asatReadDone == 0:
                if eachLine[23:26].strip() == '10':
                    #if eachLine[0:12].strip() in asatWriteCylList:
                    for cylIndex in range(len(asatWriteCylList)):
                        if eachLine[0:12].strip() == asatWriteCylList[cylIndex][0:-3] and eachLine[13:15].strip() == asatWriteCylList[cylIndex][-3]:
                            #print asatWriteCylList[cylIndex]
                            asatReadGLogCnt +=1
                            del asatWriteCylList[cylIndex]
                            break
            #if splitStr[2] in asatWriteCylList:
            #    asatReadGLogCnt += 1
            #   print "asat read"+eachLine
    f.close()
    if asatWriteGLogCnt != 0:
        ratio = 100*asatReadGLogCnt/asatWriteGLogCnt
    else:
        ratio = 0
    print 'SN:%s,Write G log:%d Read G log:%d Ratio:%.4f%%\n'%(SN,asatWriteGLogCnt,asatReadGLogCnt,ratio)
    #sleep(1)
    #directry = raw_input("Enter directry:D:/LXK/Your directry\n")
    #print getFileList(directry)
if __name__=="__main__":
    """
    i = 0
    pool = Pool(processes = 4)
    directory = raw_input("Enter directory name\n")
    fileList = getFileList(directory)
    print fileList[0]
    while i< len(fileList):
        result = pool.apply_async(DuplicateCheck,(fileList[i],))
        i+=1
    pool.close()
    pool.join()
    if result.successful():
        print "check successfull"
    """
    #multiThread()                 # test for thread operation
    multiThreadForDuplicateCheck() #multi thread operation,lower than mutiprocess
    #multiProcessForDuplicateCheck() #multi process operation

© 著作权归作者所有

开心613
粉丝 2
博文 2
码字总数 709
作品 0
深圳
程序员
私信 提问
Python系列直播——深入Python与日志服务,玩转大规模数据分析处理实战(资料持续更新)

第一讲——使用IPython/Jupyter Notebook与日志服务玩转超大规模数据分析与可视化 直播时间: 2月21日(周四)20:00—21:00 直播介绍: IPython/Jupyter Notebook非常流行,但随着数据量越来...

成喆
03/12
0
0
使用Python解析nginx日志文件

项目的一个需求是解析nginx的日志文件。 简单的整理如下: 日志规则描述 首先要明确自己的Nginx的日志格式,这里采用默认Nginx日志格式: 其中一条真实记录样例如下: 其中,客户端型号信息用...

_Zhao
2018/08/27
0
0
书籍:掌握Python脚本系统管理 Mastering Python Scripting for System Administrators - 2019.pdf

简介 主要特点 了解如何解决系统管理员的问题并自动执行日常活动 学习处理正则表达式,网络管理 构建GUI,网络抓取和数据库管理,包括数据分析 Python随着时间的推移不断发展,并扩展了与每个...

python人工智能命理
04/08
0
0
Python如何操作文件?Python基础教程,第十二讲,文件读写

说到文件和流,是所有编程语言必学技能了,可见重要程度多有高。想一下我们身边有那些案例是程序操作文件?最常见的使用Atom打开一个文件,保存我写的课件。Python项目中以文件的方式记录日志...

程序员补给栈
01/23
12
0
Python发展迅速,成为学术界新主流

如果说2018年以前R是数据学术界的主流,但是现在Python正在慢慢取代R在学术界的地位。 Python与R相比速度要快。Python可以直接处理上G的数据;R不行,R分析数据时需要先通过数据库把大数据转...

Python燕大侠
2018/05/07
97
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部