上一节我们已经知道了如何利用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, QP. 版权所有.