在f.read上过滤多个字符串

时间:2015-09-21 08:50:43

标签: python python-2.7

我一直在玩各种方法来过滤f.read()上的多个字符串。我似乎无法找到一个像我期望的那样工作,除了多个单独的循环,但我拒绝相信没有更优雅的解决方案。

我正在尝试做类似的事情:

if 'string' or 'string2' or 'string3' in f.read():

我尝试了一些变体,例如:

if ('string1', 'string2','string3') in f.read():

if f.read() ('string1', 'string2','string3'):

当然,我没有找到一种以我期望的方式工作的方式,而谷歌和文档都没有,有人可以启发我吗?

在Kasramvd的启蒙之后,下面展示了优雅和功能。特别注意结局线。

check_list = ['string1', 'string2', 'string3']
for filename in files:
     f = open(root + filename)
     fi = f.read()
     if any(i in fi for i in check_list):

2 个答案:

答案 0 :(得分:4)

您的第一个代码已经接近但是您需要在条件而非对象之间使用or,因此您可以将其更改为以下内容:

with open('file_name') as f:
    fi = f.read()
    if 'string' in fi or 'string2' in fi or 'string3' in fi:

但是,您可以使用内置函数any

with open('file_name') as f:
    fi = f.read()
    if any(i in fi for i in word_set)

如果您正在处理一个巨大的文件而不是将整个文件内容加载到内存中,您可以使用函数检查每行中是否存在字符串:

def my_func(word_set):
    with open('file_name') as f:
        for line in f:
            if any(i in line for i in word_set):
                return True
        return False

答案 1 :(得分:-1)

您可以将它们列入一个列表然后进行比较:

lst=['string','string2','string3']
any(l in f.read() for l in lst)