Python实现的大数据分析操作系统日志功能示例
本文实例讲述了Python实现的大数据分析操作系统日志功能。分享给大家供大家参考,具体如下:
一代码
1、大文件切分
importos importos.path importtime defFileSplit(sourceFile,targetFolder): ifnotos.path.isfile(sourceFile): print(sourceFile,'doesnotexist.') return ifnotos.path.isdir(targetFolder): os.mkdir(targetFolder) tempData=[] number=1000 fileNum=1 linesRead=0 withopen(sourceFile,'r')assrcFile: dataLine=srcFile.readline().strip() whiledataLine: foriinrange(number): tempData.append(dataLine) dataLine=srcFile.readline() ifnotdataLine: break desFile=os.path.join(targetFolder,sourceFile[0:-4]+str(fileNum)+'.txt') withopen(desFile,'a+')asf: f.writelines(tempData) tempData=[] fileNum=fileNum+1 if__name__=='__main__': #sourceFile=input('Inputthesourcefiletosplit:') #targetFolder=input('Inputthetargetfolderyouwanttoplacethesplitfiles:') sourceFile='test.txt' targetFolder='test' FileSplit(sourceFile,targetFolder)
2、Mapper代码
importos importre importthreading importtime defMap(sourceFile): ifnotos.path.exists(sourceFile): print(sourceFile,'doesnotexist.') return pattern=re.compile(r'[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}') result={} withopen(sourceFile,'r')assrcFile: fordataLineinsrcFile: r=pattern.findall(dataLine) ifr: t=result.get(r[0],0) t+=1 result[r[0]]=t desFile=sourceFile[0:-4]+'_map.txt' withopen(desFile,'a+')asfp: fork,vinresult.items(): fp.write(k+':'+str(v)+'\n') if__name__=='__main__': desFolder='test' files=os.listdir(desFolder) #如果不使用多线程,可以直接这样写 '''forfinfiles: Map(desFolder+'\\'+f)''' #使用多线程 defMain(i): Map(desFolder+'\\'+files[i]) fileNumber=len(files) foriinrange(fileNumber): t=threading.Thread(target=Main,args=(i,)) t.start()
3.Reducer代码
importos defReduce(sourceFolder,targetFile): ifnotos.path.isdir(sourceFolder): print(sourceFolder,'doesnotexist.') return result={} #Dealonlywiththemappedfiles allFiles=[sourceFolder+'\\'+fforfinos.listdir(sourceFolder)iff.endswith('_map.txt')] forfinallFiles: withopen(f,'r')asfp: forlineinfp: line=line.strip() ifnotline: continue position=line.index(':') key=line[0:position] value=int(line[position+1:]) result[key]=result.get(key,0)+value withopen(targetFile,'w')asfp: fork,vinresult.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函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。