我正在搜索文件中的特定行。如果我所需的行不存在,我想打印该行。例如,我的文件包含以下几行:
list 0
list 7
list 2
list 5
这是我到目前为止写的:
fo=open(filename,"r")
for i in range(0,6):
str="list"+str(i)
for line in fo.readlines():
if not str in line:
print "%s%s" %(str,"is missing in file"
请任何人帮助我
第一个问题是它将list+str(i)
无法正常工作,除非您碰巧在list = 'list '
较早的位置进行了定义。
第二个问题是,通过命名变量str
,您将隐藏函数str
,这意味着您下次无法在循环中调用该函数。
第三个问题是您只打开一次文件,但是调用readlines()
了7次。第一次之后,不再需要读取任何行,因此您将获得一个空列表。只需在循环外调用一次,然后存储值:lines = fo.readlines()
。或者,也可以每次通过循环而不是一次重新打开文件。
第三个问题是,你要打印输出凡不行一次,而不是只有一个,如果任何行不匹配。这是唯一棘手的部分,因此我将继续讨论。
第四个问题是您的print
陈述缺少)
。
最后,您已经用python-2.7和python-3.x标记了您的问题。我假设您不是在尝试添加世界上的每个标签,以希望能够吸引更多的观看者,并且实际上希望您的代码能够同时在2.7和3.3下运行。在这种情况下,您不能将其print
用作语句。您必须将其用作功能。
那么,怎么说“如果字符串不在任何行中”?简单的方法是使用以下any
功能:
if not any(s in line for line in lines):
如果您不明白这一点,则可以通过显式写出循环来获得相同的效果,如下所示:
found = False
for line in lines:
if s in line:
found = True
break
if not found:
还有很多其他的问题,您应该解决(例如,关闭文件,最好使用一个with
语句,避免readlines
在可能的情况;等等),但没有更多的,你需要给修复。因此,这是经过最少编辑的工作版本:
fo=open(filename,"r")
lines = fo.readlines()
for i in range(0,6):
s='list '+str(i)
if not any(s in line for line in lines):
print("%s%s" %(s,"is missing in file"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句