//
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
有帮助的话还希望点下再看哈