Python在文件中查找模式

时间:2014-11-10 04:20:10

标签: python

我想循环浏览一个文件并以相同的顺序搜索模式("红色","黄色"或者"绿色"),即它如果找到则应返回红色,否则返回黄色,否则返回绿色。我没有成功,因为python回来没有找到任何模式,但字符串黄色实际上在文件中:

with open("/tmp/store_results") as results:
    for line in open(results, "r"):
        if "red" in line:
            color = "red"
        elif "yellow" in line:
            color = "yellow"
        else:
            color = "green"

print "Color is %s" % (color)

results.close()

$ Color is green

测试其他字符串很明显它根本不识别任何模式。

3 个答案:

答案 0 :(得分:1)

您正在循环文件的每个行,并且每次都重新分配color。因此,即使在一个特定行中找到“黄色”,循环也会继续到后续行,这些行可能不包含单词“黄色”。每次遇到不包含“红色”或“黄色”的行时,变量color都会被值"green"覆盖。因此,您将丢弃有关早期命中的信息。

答案 1 :(得分:1)

您错误地将print声明缩进;就目前而言,它只打印最后一行的结果(因为在每次后续运行中都会覆盖颜色的值),我的猜测是最后一行没有红色或黄色。

因此,您需要在for块中对齐print语句。

with open("/tmp/store_results", "r") as complete:
    for line in open(results, "r"):
        if "red" in line:
            color = "red"
        elif "yellow" in line:
            color = "yellow"
        else:
            color = "green"
        print "Color is %s" % (color)

<强> 修改

要检查整个文件中的颜色,优先选择红色黄色,黄色替代绿色,您可以

filename = "/tmp/store_results"
with open(filename, "rb") as f:
    file_content = f.read()
    if "red" in file_content:
        color = "red"
    elif "yellow" in file_content:
        color = "yellow"
    else:
        color = "green"
    print "Color is %s" % (color)

答案 2 :(得分:1)

正如@jez所说,当你的描述似乎表明你想要为每个文件返回一种颜色而不是每行时,你会通过为每一行指定'green'来覆盖你的早期行命中信息。此外,您使用open()是错误的。您需要重新排列这样的分配:

color = "green"
for line in open("/tmp/store_results", "r"):
    if "red" in line:
        color = "red"
    elif "yellow" in line:
        color = "yellow"
print "Color is %s" % (color)

因此,如果找不到其他颜色,则颜色初始化为绿色并保持绿色。请注意,如果它们都被找到,那么找到的最后一个将“赢”,因为它最后会覆盖color。对于第一个发现“获胜”的人,在breakcolor分配"red"后添加"yellow"声明。