Str匹配和readlines

时间:2018-02-07 20:08:17

标签: python string

我需要一个脚本来读取目录中的所有文件,并在字符串列表中搜索关键字。如果文件中存在关键字,则文件名将保存到列表中。问题是,我有时会得到重复的名称文件,因为我的文件都有2行(标题为1,抽象为1)我在每行搜索一次 - 我想搜索一行所有行。

这是我现在的代码:

papers = []
files = []
for file in glob.glob("*.txt"):
    with open(file) as f:
        files.append(file)
        for line in f:
            for keyword in keywords:
                if keyword in line:  # search for string
                    print 'found ' + keyword + ' in file %s' % file
                    papers.append(file)
    f.close()

注意:我知道用于消除重复的列表(集合(文件)),但这仅适用于我只搜索一个关键字时所需的内容。

任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:3)

您可以创建一个变量来检查您是否找到了匹配项,并在break语句的末尾添加了if语句。满足条件时,将变量设置为True并跳出循环。

由于您使用f.close()声明,因此您不需要with

例如:

papers = []
files = []
for file in glob.glob("*.txt"):
    with open(file) as f:
        files.append(file)
        found_keyword = False
        for line in f:
            for keyword in keywords:
                if keyword in line:  # search for string
                    print 'found ' + keyword + ' in file %s' % file
                    papers.append(file)
                    found_keyword = True
                    break # break out of keyword loop
            if found_keyword:
                break # break out of line loop