Python解析字符串

1.简介

用命令行的方式获取到主机性能(比如磁盘使用率,CPU和内存使用率等)的字符串,如果要分析或者入库的话必须对其进行解析,使其可以已合适的方式展现。

用自己的实际经验给大家提供一个简单的解析函数作为参考,还望各位批评指正。

2.函数
先上代码:
#/usr/bin/env python
#encoding=utf-8
#ZPF

class Storage(dict):
    """
    Storage就是把python字典的get set方法打包,酱紫用起来比较方便
        >>> o = storage(a=1)
        >>> o.a
        1
        >>> o['a']
        1
        >>> o.a = 2
        >>> o['a']
        2
    """
    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError as k:
            raise AttributeError(k)

    def __setattr__(self, key, value):
        self[key] = value

    def __delattr__(self, key):
        try:
            del self[key]
        except KeyError as k:
            raise AttributeError(k)

    def __repr__(self):
        return '<Storage ' + dict.__repr__(self) + '>'

storage = Storage

def analyzeStr(str, title_list, start, end=None):
    '''
    解析获取到的字符串
    str需要解析的数据,title_list指定切片对应的列名
    start 开始行,一般会自己带一列标题 , 那么要从1行开始
    end 一些末尾会有多余的空行,需要抛弃
    '''
    title_len = len(title_list)
    li = str.split('\n')             #按换行符分割
    li = li[start:end]               #切片,切掉不需要的头和尾
    li = [i.split() for i in li]     #按空格分割,分割成小列表
    table = []
    for i in li:
        d = storage()                #根据storage的定义知,这里用d = {}也是可以的。
        for n, v in enumerate(i):
            if n >= title_len:
                d[title_list[title_len - 1]] += ' ' + v
            else:
                d[title_list[n]] = v
        table.append(d)
    return table
上述先定义一个用于存储的类Storage(),方便使用,接着用analyzeStr()函数对得到的字符串进行解析。
3.实例
给出一个解析磁盘使用率的例子,以windows为例:
def main():
    command = 'wmic logicaldisk get caption, filesystem, size, freespace, drivetype' #获取磁盘使用情况的命令行
    re = os.popen(command)
    rt = re.read()  #得到的数据
    re.close()
    win_list = ["Caption", "DriveType", "FileSystem", "FreeSpace", "Size"]
    table = analyzeStr(rt,win_list,1,-2) #调用解析函数
    return table
	
if __name__ == '__main__':
    print main()
最后得到的数据很容易用于网页显示和存入数据库,我们的目的就达到了。

4.小结
上边的例子是个最简单的解析函数,通用性较强,但是呢具体的问题还需根据需求具体分析,不能生搬硬套哦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值