之前我们使用Python抓取信息,都是处理一个SNAP文件,而实际情况中,我们手上经常有多个SNAP文件需要处理,比如巡检或者信息统计。而同时处理多个文件,才能更大的发挥Python的威力。
我们在上次example4的基础上,加入一个循环,读取当前目录下的所有SNAP文件。
为了方便使用和扩展,我们把example4中的功能,定义为一个名为readsnap的函数。
另外,输出的格式,由于是需要输出多个文件的信息,因此我们把格式改为Excel表格一行输出一个文件的信息,每行的第一格输出Node Name,第二格输出CPU,第三格输出内存。
示例程序如下:
#! /usr/bin/env python #coding=utf-8 import tarfile import xlwt import os import sys import os.path #导入以上模块用于获取当前路径及当前目录下的文件名 def readsnap(table,file,linenum): snapfile = tarfile.open(file) #打开snap.pax文件 lparinfo=snapfile.extractfile("./general/lparstat.out").readlines() #读取snap.pax包中的/general/lparstat.out文件 for line in lparinfo: #循环读取lparstat.out的内容,每个循环中的line表示一行 outputline=line.split(":") #以":"为关键字去分隔line的内容 if line.find("Node Name")!=-1: table.write(linenum,0,outputline[1].strip()) #将node name写入每行第一格 if line.find("Online Virtual CPUs")!=-1: table.write(linenum,1,outputline[1].strip()) #将CPU数写入每行第二格 if line.find("Online Memory")!=-1: table.write(linenum,2,outputline[1].strip()) #将memory数写入每行第二格 linenum=linenum+1 #行号加1 return linenum #返回行号 #以上为定义函数readsnap()部分 excelfile = xlwt.Workbook() table = excelfile.add_sheet(u"测试表") #创建一个Excel表对象,并创建一个名为“测试表”的sheet linenum=0 #定义表格行号从0开始 for dirpath, dirnames, filenames in os.walk('.'): #循环读取当前路径文件名 for filename in filenames: if os.path.splitext(filename)[1] == '.pax': #如果文件扩展名为.pax filepath = os.path.join(dirpath, filename) print("file:" + filepath) linenum=readsnap(table,filepath,linenum) #调用readsnap函数 excelfile.save("test.xls") #将内容保存在“test.xls"文件
输出结果类似如下:
SAS_C | 5 | 47872 MB |
ETLSER_B | 3 | 16384 MB |
© 2015, QP. 版权所有.