我正在尝试从文本文件中提取行,并将它们作为新词典的键。到目前为止,我已经这样做了:
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 == ...”部分不正确,或者我没有正确读取文件?它不起作用。
有人能指出我正确的方向,而没有给出正确答案吗? 感谢您阅读本文!我很感激。
答案 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 ')] = ''