在文件中搜索字符串,如果找不到字符串,则执行函数;在python中

时间:2009-12-08 08:23:36

标签: python string file search caching

def checkCache(cachedText):
    for line in open("cache"):
        if cachedText + ":" in line:
            print line
            open("cache").close()
        else:
            requestDefinition(cachedText)

此代码搜索文件(缓存)的每一行以查找特定字符串(cachedText +“:”)。

如果找不到特定字符串,则在整个文件中,它将调用另一个函数(requestNewDefinition(cachedText))。

但是我上面的代码为每个不匹配的行执行函数。

如何在文件中搜索字符串(cachedText +“:”),如果在文件中找不到字符串,请执行另一个函数?

示例缓存:

hello:world
foo:bar

3 个答案:

答案 0 :(得分:2)

你的for循环被打破了。你实际上正在检查文件的每一行,并为不匹配的每一行执行函数。

另请注意,调用open("cache").close()将重新打开缓存文件并立即关闭它,而不关闭在for循环开始时打开的句柄。

执行所需操作的一种方法是使else子句成为for循环的一部分。 要注意for循环中的其他内容很棘手!

def checkCache(cachedText):
    cache = open( "cache" )
    for line in cache:
        if cachedText + ":" in line:
            break
    else:
        requestDefinition(cachedText)
    cache.close()

只有在循环中没有调用for时,break循环的else部分才会在循环结束时执行。

答案 1 :(得分:1)

这样的事情:

def checkCache(cachedText):
    for line in open("cache"):
        if cachedText + ":" in line:
            print line
            break
     else:
        requestDefinition(cachedText)

注意else:是如何附加到for的,而不是ifelse:仅在for完成后通过耗尽可迭代而不执行break来执行,这意味着在文件中的任何位置都找不到cachedText。有关详细信息,请参阅the Python documentation

答案 2 :(得分:1)

我的猜测是你想要这样的东西。如果找到该行,则应该“中断”。 “break”将结束for循环。附加到for循环的else语句(与if语句相对)只有在for循环遍历每一行而没有遇到“break”条件时才会执行。完成后仍需要关闭文件。

def checkCache(cachedText):
    f = open("cache")
    for line in f:
        if cachedText + ":" in line:
            print line
            break
    else:
        requestDefinition(cachedText)
    f.close()