Python解析字符串

来源:互联网 发布:手机遥控麻将机软件 编辑:程序博客网 时间:2024/06/05 19:21

1.简介

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

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

2.函数

先上代码:
#/usr/bin/env python#encoding=utf-8#ZPFclass 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 = Storagedef 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 tableif __name__ == '__main__':    print main()
最后得到的数据很容易用于网页显示和存入数据库,我们的目的就达到了。

4.小结

上边的例子是个最简单的解析函数,通用性较强,但是呢具体的问题还需根据需求具体分析,不能生搬硬套哦。
0 0
原创粉丝点击