Python阅读行

Python阅读行,python,Python,我试图让这个程序读取一个文件,并找到红色。仅当红色在任何一行上,但第一行检测到红色未找到时,才有效 filepath = sys.argv[1] with open(filepath,"r") as fh: for line in fh: line = line.strip() line = line.lower() words = line.split(" ") for word in words:

我试图让这个程序读取一个文件,并找到红色。仅当红色在任何一行上,但第一行检测到红色未找到时,才有效

filepath = sys.argv[1]
with open(filepath,"r") as fh:

    for line in fh:

        line = line.strip()
        line = line.lower()
        words = line.split(" ")

        for word in words:
            if re.search("red", word):
                print("I found red")
                break
            else:
                print("I did not find red")
                break

有足够多的评论,在这一点上,我们应该把它作为一个答案来编译它

1)
re.search
遍历了整行,因此不需要对words中的单词执行
,只需执行
re.search('red',line)
,不过您也应该编译正则表达式,因为您在for循环中使用它

2)
re.search
对于您的问题来说是矫枉过正。您只需在
中使用

将以下版本的代码视为更干净的解决方案:

filepath=sys.argv[1]
打开(文件路径)作为fh:
对于fh中的线路:
#由于我们正在进行安全壳检查,因此不需要剥离
如果行中为“红色”,则降低()
打印(“我发现红色”)
其他:
打印(“我没有找到红色”)
如果您想使用regex,因为您实际上有一个不同的用例,您没有显示,而不是执行以下操作:

重新导入
filepath=sys.argv[1]
FIND_RED=re.compile(r'RED',re.IGNORECASE)#忽略案例并进行编译,以便在大量使用的情况下加快速度。
打开(文件路径)作为fh:
对于fh中的线路:
如果查找红色。搜索(行):
打印(“我发现红色”)
其他:
打印(“我没有找到红色”)
一种更具python风格的方式:

filepath=sys.argv[1]
打开(文件路径,“r”)作为fh:
对于fh中的线路:
打印(“我发现了红色”如果行中的“红色”。lower()否则“我没有发现红色”)

先搜索整个文件,然后再说您没有找到它

filepath = sys.argv[1]
found = False
with open(filepath,"r") as fh:

    for line in fh:

        line = line.strip()
        line = line.lower()
        words = line.split(" ")

        if 'red' in words:
            found = True
            break
if found:
    print("I found red")
else:
    print("I did not find red")

内环for循环不需要只搜索<代码>行<代码>也考虑使用<代码>如果“红色”行:< /代码>,如果你正在做一些简单的事情,ReGEX严重超标。