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

2024-10-03 19:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

如何在一个文件中搜索一个字符串(cachedText+“:”),如果在文件中的任何地方都找不到该字符串,则执行另一个函数?在

缓存示例:

^{pr2}$

Tags: 文件函数字符串代码incacheforclose
3条回答

我猜你想要这样的东西。如果找到这条线,你应该“断开”“中断”将结束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()

像这样:

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

注意else:是如何附加到for,而不是{}。只有当else:通过耗尽iterable而完成时,else:才被执行,而不是执行break,这意味着文件中的任何地方都找不到{}。有关详细信息,请参见the Python documentation。在

你的for循环中断了。实际上,您正在检查文件的每一行,并对不匹配的每一行执行函数。在

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

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

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

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

相关问题 更多 >