簡體   English   中英

如何在python中打印缺少的行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM