在一行中查找子字符串并在python中打印该行并仅打印该行一次?

时间:2016-06-07 12:15:08

标签: python substring

我正在尝试打印文本文件中包含列表中任何单词的所有行,名为“names”。我遇到的问题是我的程序迭代太多,因为多次迭代,重复的行被打印出来。如何只打印一次线路?另外如何将行打印到输出文件?

这是我到目前为止所做的:

names=[bob,carter,jim,mike]
with open("base.txt") as openfile:
         for line in openfile:
             for part in line.split():
                 for i in names:
                     if i in part:

                         print line

3 个答案:

答案 0 :(得分:0)

无需分割线条,只需检查整个线条是否包含该名称。此外,无需检查每个名字,第一场比赛即可。 any可以帮助您避免一些颠簸的代码:

with open("base.txt") as openfile:
    for line in openfile:
        if any(name in line for name in names):
            print line

答案 1 :(得分:0)

检查一次所有名称并使用any(),如下所示。

names=['bob','carter','jim','mike']
with open("base.txt") as openfile:
    for line in openfile:
        if any([n in line for n in names]):
            print line.strip()  

[n in line for n in names]做的是检查行中的每个名称并返回布尔列表。 any()检查列表中的任何元素是否为True

答案 2 :(得分:0)

正如其他人已发布的那样,您可以使用any来确认该行中至少有一个名称的出现。使用列表推导将所有匹配的行放入列表中:

with open("base.txt") as openfile, open("output.txt", "w") as outputfile:
     result = [line if any(n in line for n in names) for line in openfile]
     outputfile.writelines(result) # wwii's comment: the lines already contain a separator

要将result写入outputfile,您应该使用writelines方法,该方法将result序列作为参数(@ wwii的注释)。