[英]how to print missing line in python?
我正在搜索文件中的特定行。 如果我所需的行不存在,我想打印該行在文件中丟失。 例如,我的文件包含以下幾行:
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
語句缺少a )
。
最后,您已經用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"))
永遠不要給變量str
命名,因為str
是Python中的內置類型。 另外,您還嘗試連接list
,一個函數和一個類型以及一個字符串。 相反,您想將字符串'list '
與數字的字符串表示形式連接起來。 您無需在原來的位置調用readlines()
。 相反,請盡早將文件讀入列表,然后遍歷該列表。
fo=open(filename,"r").readlines()
for i in range(0,6):
s = 'list ' + str(i)
foundline = False
for line in fo:
if s in line:
foundline = True
break
if not foundline:
print "%s%s" % (s,"is missing in file")
with open(filename,'r') as infile:
inlines=infile.readlines()
for term in xrange(0,10):
line='list %d\n' % term
if line not in inlines:
print line,'is not in the file'
// nb,這會將整個搜索字符串匹配到輸入行。 我想這是您的意思,而不是在輸入行中查找搜索字詞,因為在行中搜索“行1”將與“行1”,“行10”,“行1000”等匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.