python的findall函数调用总是出错,请教要怎么解决
#!/usr/bin/pythonimportcommandsimportsysfromoptparseimportOptionParserimportredefget_...
#!/usr/bin/python
import commands
import sys
from optparse import OptionParser
import re
def get_hadoop_status():
file = open("/usr/local/nagios/test.txt", 'r')
dead_num = 0
line = file.readline()
while ('' != line):
string = line
value = re.findall( '.?datanode\d+\s+(\d).+', string)
if (value == 1):
dead_num += 1
else:
pass
file.close()
if __name__ == '__main__':
parser = OptionParser(usage="%prog [-w] [-c]", version="%prog 1.0")
parser.add_option("-w", "--warning", type="int", dest="w", default=1)
parser.add_option("-c", "--critical", type="int", dest="c", default=3)
(options, args) = parser.parse_args()
if(options.c <= options.w):
print '-c must greater than -w'
sys.exit(1)
get_hadoop_status()
if(dead_num >= options.c) :
print 'CRITICAL - DeadNode number is %d:\n' %(dead_num)
# while (count<dead_num):
# print 'datanode%d\n' %(datanode_num(count))
# count += 1
# print dead_datanode_status
sys.exit(2)
elif(dead_num >= options.w):
print 'WARNING - DeadNode number is %d:\n' %(dead_num)
# while (count<dead_num):
# print 'datanode%d\n' %(datanode_num(count))
# count += 1
# print dead_datanode_status
sys.exit(1)
else:
print 'OK - DeadNode number is %d' %(dead_num)
sys.exit(0)
我是想匹配底下的这种格式文件每行的最后一位,为0时代表正常,为1时代表宕机:
datanode1 1
datanode2 0
datanode3 0
datanode4 0
datanode5 1
datanode6 1
datanode7 1
执行后总是显示底下的错误:
Traceback (most recent call last):
File "./check_datanode_alive", line 30, in ?
get_hadoop_status()
File "./check_datanode_alive", line 13, in get_hadoop_status
value = re.findall( '.?datanode\d+\s+(\d).+', string)
File "/usr/lib64/python2.4/sre.py", line 167, in findall
return _compile(pattern, flags).findall(string)
请教要怎么解决 展开
import commands
import sys
from optparse import OptionParser
import re
def get_hadoop_status():
file = open("/usr/local/nagios/test.txt", 'r')
dead_num = 0
line = file.readline()
while ('' != line):
string = line
value = re.findall( '.?datanode\d+\s+(\d).+', string)
if (value == 1):
dead_num += 1
else:
pass
file.close()
if __name__ == '__main__':
parser = OptionParser(usage="%prog [-w] [-c]", version="%prog 1.0")
parser.add_option("-w", "--warning", type="int", dest="w", default=1)
parser.add_option("-c", "--critical", type="int", dest="c", default=3)
(options, args) = parser.parse_args()
if(options.c <= options.w):
print '-c must greater than -w'
sys.exit(1)
get_hadoop_status()
if(dead_num >= options.c) :
print 'CRITICAL - DeadNode number is %d:\n' %(dead_num)
# while (count<dead_num):
# print 'datanode%d\n' %(datanode_num(count))
# count += 1
# print dead_datanode_status
sys.exit(2)
elif(dead_num >= options.w):
print 'WARNING - DeadNode number is %d:\n' %(dead_num)
# while (count<dead_num):
# print 'datanode%d\n' %(datanode_num(count))
# count += 1
# print dead_datanode_status
sys.exit(1)
else:
print 'OK - DeadNode number is %d' %(dead_num)
sys.exit(0)
我是想匹配底下的这种格式文件每行的最后一位,为0时代表正常,为1时代表宕机:
datanode1 1
datanode2 0
datanode3 0
datanode4 0
datanode5 1
datanode6 1
datanode7 1
执行后总是显示底下的错误:
Traceback (most recent call last):
File "./check_datanode_alive", line 30, in ?
get_hadoop_status()
File "./check_datanode_alive", line 13, in get_hadoop_status
value = re.findall( '.?datanode\d+\s+(\d).+', string)
File "/usr/lib64/python2.4/sre.py", line 167, in findall
return _compile(pattern, flags).findall(string)
请教要怎么解决 展开
2013-04-08 · 知道合伙人软件行家
关注
展开全部
我一般都是用math或者seach的,你可以试试。
re.match
re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词。
import retext ="JGood is a handsome boy, he is cool, clever, and so on..."
m = re.match(r"(\w+)\s", text)
if m:
print m.group(0), '\n', m.group(1)
else:
print'not match're.match的函数原型为:re.match(pattern, string, flags)第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None;第二个参数表示要匹配的字符串;第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。re.search re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。import re
text ="JGood is a handsome boy, he is cool, clever, and so on..."
m = re.search(r'\shan(ds)ome\s', text)
if m:
print m.group(0), m.group(1)
else:
print'not search're.search的函数原型为: re.search(pattern, string, flags)每个参数的含意与re.match一样。 re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
re.match
re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词。
import retext ="JGood is a handsome boy, he is cool, clever, and so on..."
m = re.match(r"(\w+)\s", text)
if m:
print m.group(0), '\n', m.group(1)
else:
print'not match're.match的函数原型为:re.match(pattern, string, flags)第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None;第二个参数表示要匹配的字符串;第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。re.search re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。import re
text ="JGood is a handsome boy, he is cool, clever, and so on..."
m = re.search(r'\shan(ds)ome\s', text)
if m:
print m.group(0), m.group(1)
else:
print'not search're.search的函数原型为: re.search(pattern, string, flags)每个参数的含意与re.match一样。 re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
展开全部
前面加r试试r'.?datanode\d+\s+(\d).+'。这个输入文件这么有规律,直接readline().split()[1]也行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
光从你这个栈追踪上看不出什么问题
你可以试试换成re.search(r'datanode.*(\d).+', a).group(1)
你可以试试换成re.search(r'datanode.*(\d).+', a).group(1)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询