Python文件I / O.

时间:2012-09-05 22:25:29

标签: python io

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中列出的字符串的行。这里出了点问题......

如何解决此问题?

3 个答案:

答案 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!")