//

Python解析文本时常用的几个函数

//

今天在看监控信息采集的一个脚本,这个脚本是之前的同事写的,我们知道,监控项一般有很多,就拿MySQL来说,数据库的存活、buffer_pool大小、TPS、QPS、主从复制延迟、IO线程状态、SQL线程状态等等、要实现这些功能,避免不了要对一些SQL得到的文本进行解析,所以这个Python脚本里面用到了很多字符处理的函数,我大概理了一下,一些重要的记了记,发现小知识点还挺多的,一起看看吧。

1、seek()方法

该方法用于移动文件读取指针到指定位置f_meminfo = open("/proc/meminfo", "r")

f_meminfo.seek(0)

打开/proc/meminfo文件,将文件读取指针移动到最开始的位置。

2、match()方法

从名字不难看出,他是用来进行匹配的函数,先看看/proc/meminfo中的内容:[root@ ~]# cat /proc/meminfo

MemTotal: 8045616 kB

MemFree: 135380 kB

Buffers: 149000 kB

Cached: 1550080 kB

SwapCached: 67516 kB

Active: 1504756 kB

可以看到,都是应为单词+冒号+空格+数字+空格+kb的形式,可以用如下方式进行匹配。for line in f_meminfo:

m = re.match("(\w+):\s+(\d+)\s+(\w+)", line)

在某一行匹配如下格式的内容:

非特殊字符+:+空格+数字+空格+非特殊字符

eg:

memtotal: 1000 kb

这种类型的开头

其中:

\w匹配非特殊字符,即a~z,A~Z,0~9以及_和汉字

\s匹配空白,空格,tab键

还有其他的一些匹配方法

\D匹配非数字

\W匹配特殊字符,例如&,¥等

细心的朋友可能看到了,上面的match方法中,还有包含括号的内容,这里的括号是干什么用的呢?其实是为了分组用的,这里我们再介绍第三个函数。

3、group()方法for line in f_meminfo:

m = re.match("(\w+):\s+(\d+)\s+(\w+)", line)
if m:
if m.group().lower() == 'kb':
value = str(int(m.group()) * )
else:
value = m.group()
if m.group().lower() == "memtotal" :
mem_total = int(value)

group的作用是匹配的是第几个括号括起来的地方,上面代码中,group里面的值是3,其实就是匹配re.match("(\w+):\s+(\d+)\s+(\w+)", line)中第三个括号里面的内容(\w)是否是"kb"

4、startwith()方法

Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。

语法如下:str.startswith(str, beg=0,end=len(string));

其中

str -- 检测的字符串。

strbeg -- 可选参数用于设置字符串检测的起始位置。

strend -- 可选参数用于设置字符串检测的结束位置。

来看一个测试效果:

#!/usr/bin/python
str = "this is string example....wow!!!";
print str.startswith( 'this' );
print str.startswith( 'is', , );
print str.startswith( 'this', , );

运行结果:True

True

False

有帮助的话还希望点下再看哈