如何检查文本文件中的行是否等于特定字符串?

时间:2016-11-29 17:20:47

标签: python

我正在尝试从文本文件中提取行,并将它们作为新词典的键。到目前为止,我已经这样做了:

file = open(FileName, 'r')
dictionary = {}
for line in file:
    if line == ("Red" or "Yellow" or "Blue"):
       dictionary[line] = '' # And then I'll edit this empty string later. 
return dictionary
file.close()

我觉得“if line == ...”部分不正确,或者我没有正确读取文件?它不起作用。

有人能指出我正确的方向,而没有给出正确答案吗? 感谢您阅读本文!我很感激。

2 个答案:

答案 0 :(得分:3)

你的感受是正确的。你看,Python的if语句不能像英语一样工作。 if语句的第二部分:("Red" or "Yellow" or "Blue"),是布尔表达式or运算符接受两个值,并返回第一个值true。在这种情况下,由于Python中的任何非空字符串在布尔术语中都被视为true,因此您的布尔表达式返回“Red”。这意味着你的if语句真正说的是:

if line == "Red":

您需要做的是针对每个值测试line。虽然这可以通过遍历每个值并说:if line == "Red" or line == "Blue"...来完成,但Python是一种更好的方法。使用in运算符,您可以创建一个包含要对其line进行测试的所有值的iterable。然后,Python将测试line是否等于iterable中的任何值。在您的情况下,使用元组会很好,但如果您需要针对更多值测试line,则应使用set()代替:

if line in ("Red", "Yellow", "Blue"):
    # do stuff

最后一点是line可能包含换行符。您可以使用.strip()删除换行符。所以你最终的解决方案是:

if line.strip('\n') in ("Red", "Yellow", "Blue"):
        # do stuff

答案 1 :(得分:2)

使用:

if line in ("Red", "Yellow", "Blue"):

要检查您的行是否包含空格或\n,您可以使用:

line.strip('\n ')而非line

if line.strip('\n ') in ("Red", "Yellow", "Blue"):
    dictionary[line.strip('\n ')] = ''