Python 如何输出文件中包含列表中任何字符串的每一行

Python 如何输出文件中包含列表中任何字符串的每一行,python,exception,file-io,io,filehandle,Python,Exception,File Io,Io,Filehandle,到目前为止,我所拥有的: def FileSearch(filename, items): try: filehandle = open( filename, "r" ) linenumber = 0 for line in filename: linenumber +=1 for item in items: if item in line:

到目前为止,我所拥有的:

def FileSearch(filename, items):
    try:
        filehandle = open( filename, "r" )
        linenumber = 0
        for line in filename:
            linenumber +=1
            for item in items:
                if item in line:
                    print("%2i - %s" %( linenumber, line), end="")
    except IOError:
        print("Error file cannot be read or file does not exist")
        print("Please try again")
我正在尝试打印包含列表“items”中包含的任何字符串的行号前的行。所以它会输出如下内容:

>>>FileSearch("textfile",["this","and","is"])
2 - this is the 2nd line
4 - hello and goodbye
5 - this is a very basic example
但是当我运行程序时,我甚至没有收到错误,什么也没有发生,它只是运行到下一行。 我非常感谢你的帮助。
我还想知道是否有一种方法可以按数字顺序打印这些行,或者程序会在这里自己打印吗?

您不会得到输出,也不会得到错误,因为您不是在文件的行上进行迭代,而是在
文件名的字符上进行迭代。更改此行:

for line in filename:
对于这一点:

for line in filehandle:

您没有得到输出,也没有得到错误,因为您不是在文件的行上进行迭代,而是在
文件名的字符上进行迭代。更改此行:

for line in filename:
对于这一点:

for line in filehandle:

您是否希望找到多个匹配项的行被多次打印?不,我不希望有任何重复项您是否希望找到多个匹配项的行被多次打印?不,我不希望有任何重复项!谢谢,但它会输出重复项,我如何避免它们?@DecafOyster208您的示例中的输出是“重复”的,因为您的
包含两个字符串(
this
is
),它们都在第2行和第5行。如果您像这样运行函数:
FileSearch(“textfile”,“this”,“and”])
,您将看到它没有重复。但是如果您想在第一次匹配后停止循环,只需在
打印(“%2i-%s”%(linenumber,line),end=“”)之后添加
break
语句就行了!谢谢,但它会输出重复项,我如何避免它们?@DecafOyster208您的示例中的输出是“重复”的,因为您的
包含两个字符串(
this
is
),它们都在第2行和第5行。如果您像这样运行函数:
FileSearch(“textfile”,“this”,“and”])
,您将看到它没有重复。但是,如果要在第一次匹配后停止循环,只需在
打印(“%2i-%s”%(linenumber,line),end=”“)之后添加
break