Step By Step使用Python分析AIX SNAP(4)——获取需要的信息

上一节我们已经知道了如何利用Python打开SNAP文件,以及如何把信息写入到Excel文件中。

但是SNAP中的信息很多,很多时候我们只是需要其中的一些信息,而不是把整个文件的内容都输出出来。

比如,我只是想知道这个OS的主机名和CPU内存资源,或者机器的型号序列号。

比如

SNAP里面/general/lparstat.out文件,包含如下信息

Node Name                                  : Node1
Partition Name                             : Node1
Partition Number                           : 6
Type                                       : Dedicated-SMT
Mode                                       : Capped
Entitled Capacity                          : 5.00
Partition Group-ID                         : 32774
Shared Pool ID                             : -
Online Virtual CPUs                        : 5
Maximum Virtual CPUs                       : 10
Minimum Virtual CPUs                       : 1
Online Memory                              : 47872 MB
Maximum Memory                             : 73728 MB
Minimum Memory                             : 2048 MB
Variable Capacity Weight                   : -
Minimum Capacity                           : 1.00
Maximum Capacity                           : 10.00
Capacity Increment                         : 1.00
Maximum Physical CPUs in system            : 16
Active Physical CPUs in system             : 16
Active CPUs in Pool                        : -
Shared Physical CPUs in system             : 0
Maximum Capacity of Pool                   : 0
Entitled Capacity of Pool                  : 0
Unallocated Capacity                       : -
Physical CPU Percentage                    : 100.00%
Unallocated Weight                         : -
Memory Mode                                : Dedicated
Total I/O Memory Entitlement               : -
Variable Memory Capacity Weight            : -
Memory Pool ID                             : -
Physical Memory in the Pool                : -
Hypervisor Page Size                       : -
Unallocated Variable Memory Capacity Weight: -
Unallocated I/O Memory entitlement         : -
Memory Group ID of LPAR                    : -
Desired Virtual CPUs                       : 5
Desired Memory                             : 47872 MB
Desired Variable Capacity Weight           : -
Desired Capacity                           : 5.00
Target Memory Expansion Factor             : -
Target Memory Expansion Size               : -
Power Saving Mode                          : Disabled

假如我们只需要输出Node Name 、Online Virtual CPUs 、Online Memory这三项内容,那么可以使用如下Python程序,修改自exmaple1

#! /usr/bin/env python
#coding=utf-8

import tarfile
snapfile = tarfile.open("snap.pax")
#打开snap.pax文件

lparinfo=snapfile.extractfile("./general/lparstat.out").readlines()
#读取snap.pax包中的/general/lparstat.out文件
#注意使用的是readlines(),表示按行读取,读取的结果是数组,即lparinfo[0]是第一行,lparinfo[1]是第二行。。。

outputfile=open("lparinfo.txt",'w')
#将输出保存在lparinfo.txt文件

for line in lparinfo:
    if line.find("Node Name")!=-1 or line.find("Online Virtual CPUs")!=-1 or line.find("Online Memory")!=-1:
        outputfile.write(line)
#这里是一个循环,循环取数组lparinfo中的每一个值给变量line,即第一次循环line=lparinfo[0],第二次循环line=lparinfo[1]
#line.find()表示在变量line字符串内查找是否有对应的内容,比如line.find("Node Name")就是查找line内是否存在"Node Name"
#返回的值是查找内容在line内的位置号,找不到就返回-1,line.find("Node Name")!=-1即表示line中有"Node Name"
#当查找到"Node Name"、"Online Virtual CPUs"、"Online Memory"任意一个时,输出该行内容到outputfile

outputfile.close()

将以上内容保存为example3.py,同目录下有一个snap.pax的文件,双击运行example3.py,就会产生一个lparinfo.txt的文件

内容应该是

Node Name                                  : Node1
Online Virtual CPUs                        : 5
Online Memory                              : 47872 MB

下一步,我们结合起来,不再把内容输出到文本文件,而是输出到Excel文件

#! /usr/bin/env python
#coding=utf-8

import tarfile
import xlwt

excelfile = xlwt.Workbook()
table = excelfile.add_sheet(u"测试表")
#创建一个Excel表对象,并创建一个名为“测试表”的sheet

snapfile = tarfile.open("snap.pax")
#打开snap.pax文件

lparinfo=snapfile.extractfile("./general/lparstat.out").readlines()
#读取snap.pax包中的/general/lparstat.out文件

i=0
#利用变量i来作为输出表格的行数

for line in lparinfo:
if line.find("Node Name")!=-1 or line.find("Online Virtual CPUs")!=-1 or line.find("Online Memory")!=-1:
outputline=line.split(":")
#以":"为关键字去分隔line的内容,分隔后的内容为数组outputline,outputline[0]表示分隔的第一部分,以此类推
table.write(i,0,outputline[0].strip())
table.write(i,1,outputline[1].strip())
#将line内容的第一部分outputline[0]写入第i行的第0格,第二部分outputline[1]写入第1格,strip()用于去除多余空格
i=i+1
#行号加1

excelfile.save("test.xls")
#将内容保存在“test.xls"文件

输出的Excel文件test.xls,内容应该是

Node Name Node1
Online Virtual CPUs 5
Online Memory 47872 MB

下次我们研究一下更复杂的数据抓取

© 2015, szqp. 版权所有.

此条目发表在计算机与 Internet分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>