fPath = raw_input('File Path:')
counter = 0;
flag = 0;
with open(fPath) as f:
content = f.readlines()
for line in content:
if flag == 0 and line.find("WECS number") or \
line.find("WECS number") or \
line.find("WECS name") or \
line.find("Manufacturer") or \
line.find("Type") or \
line.find("Nominal effect") or \
line.find("Hub height") or \
line.find("x (local)") or \
line.find("y (local)") or \
line.find("x (global)") or \
line.find("y (global)"):
if not line.find("y (global)"):
print ("Alert Last Line!");
else:
print("Alert Line!");
出于某种原因,代码似乎正在打印“Alert Line!”如果一行只是“\ n”。我创建“if和or”结构的意图是忽略所有不包含line.find
中列出的字符串的行。这里出了点问题......
如何解决此问题?
答案 0 :(得分:6)
如果找不到子字符串,则字符串的.find()
方法返回-1
。 -1
非零,因此被认为是真的。这可能不是你所期望的。
更加Pythonic方式(因为你不关心字符串的位置)是使用in
运算符:
if "WECS number" in line: # and so on
您还可以在适当的地方使用startswith()
和endswith()
:
if line.startswith("WECS number"):
最后,只需使用括号括起整个布尔表达式,就可以避免所有这些反斜杠。如果括号打开,Python会继续前进到下一行。
if (condition1 or condition2 or
condition3 or condition4):
答案 1 :(得分:1)
如果找不到字符串,则字符串find()
方法返回-1。 -1在布尔上下文中计为true。所以你的if子句在你不认为的时候正在执行。你最好使用if "blah" in line
来测试子串是否存在。
答案 2 :(得分:1)
str.find
如果找不到子字符串则返回-1,boolean(-1) == True
,所以line.find("WECS number")
总是为True,除非该行以WECS编号开头,在这种情况下line.find("WECS name")
1}}是真的。
你想:
fPath = raw_input('File Path:')
with open(fPath) as f:
for line in f:
if any(s in line for s in ("WECS number", "WECS name", "Manufacturer","Type",
"Nominal effect", "Hub height", "x (local)",
"y (local)", "x (global)", "y (global)",)):
if "y (global)" in line:
print("Alert Line!")
else:
print ("Alert Last Line!")