我想循环浏览一个文件并以相同的顺序搜索模式("红色","黄色"或者"绿色"),即它如果找到则应返回红色,否则返回黄色,否则返回绿色。我没有成功,因为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
测试其他字符串很明显它根本不识别任何模式。
答案 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
。对于第一个发现“获胜”的人,在break
或color
分配"red"
后添加"yellow"
声明。