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严重超标。