之前我们使用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. 版权所有.