如何比较任务输出中的多个数字并在Python中打印某些内容?

时间:2015-11-14 16:41:57

标签: python python-2.7

example.txt文件:

total tests passed : 0 in last run
number of test passed : 0 in yesterday
sent report for passed : 0 in tests

请注意:此文件不限于3行,如上所示。有时候只会有一条线。有时它会超过三行。

现在我的工作是:

任务1:Grep all"通过:"计数

示例输出:

0
23
0

任务2:如果任何一个"通过计数不等于零"然后打印" TASK已完成"

示例输出:

TASK Completed

我尝试过以下Python代码:

import re
test = open("test.txt", 'r')

for i in test:
    output = re.match('.*(passed :)(.*) (in)', i)
    if output:
        print output.group(2)

现在我可以打印所有"传递:"数(任务1)。

如何比较所有这些值,如果任何一个值不等于零则打印为"任务已完成"?

请问这个想法吗?

2 个答案:

答案 0 :(得分:1)

怎么样?

completed = False
for i in test:
    output = re.match('.*(passed :)(.*)', i)
    if output:
        print output.group(2)
        if not output.group(2) == "0":
            completed = True
if completed:
   print "TASK COMPLETED"

-

修改

所以你还需要正则表达式将数字分开,

尝试

re.match( r'.*(passed : )(\d*)(.*)', i )

这意味着,找到"通过:"后跟任意数量的数字,后跟任何其他文本。 应根据需要将数字分组为匹配组。

答案 1 :(得分:1)

import re

PASSED = re.compile(r" passed : (\d+)")

def get_passed_values(s):
    for match in PASSED.finditer(s):
        yield int(match.group(1))   # return the number as an integer

def is_complete(s):
    return any(v > 0 for v in get_passed_values(s))

with open("test.txt") as test:
    s = test.read()
    if is_complete(s):
        print("TASK COMPLETED")
    else:
        raise ValueError("All 0s!")

编辑:我在所有0上添加了“提升异常”条款。