python - 循环搜索字符串直到找到字符串 python

标签 python string search file-io

我以为这会很容易,经过 3 小时的搜索和反复试验,这似乎并不容易。

我只想循环搜索一个字符串,直到找到该字符串。我正在日志文件中搜索出现条件时出现的字符串,例如当字符串 "function test 1" 出现在日志中时,我需要找到它然后执行另一个函数。

找到是没有问题的,问题是循环直到找到。

这完美地找到了:

for line in open(WebPath + SmokeTest): #these are variables I use to construct the path
    if 'readfalseloop2' in line:
            print True
            f = open(WebPath + SmokeTest,'a')
            f.write('<font color= "#347C2C">readfalseloop2</font><br />')
            f.close()
            break
    else:
        print False

我想执行这个直到找到这个词。理想情况下,我想将它嵌入到多个函数中,此时我不想单独定义。

我没有成功使用任何循环构造,是的,我查看了 python 文档,搜索了这个站点并 ubuntu forum .

最佳答案

安德鲁的好代码。我没有被告知存在 for/else 可能性。

但是为了缓和机器进程的事件,可以避免重复打开和关闭文件,并且最好降低验证 IMO 的频率

from time import sleep

with open(WebPath + SmokeTest,'a+') as f:
    while True:
        if 'readfalseloop2' in f.read():
            f.seek(0,1)
            f.write('\n<font color= "#347C2C">readfalseloop2</font><br />')
            print True
            break
        print '~',
        f.seek(0,0)
        sleep(2)

这段代码有效,我测试过了。但前提是更改是通过另一个程序执行的。当我试图通过插入

来修改文件时
<font color= "#347C2C">readfalseloop2</font><br />

手动链接,Windows 拒绝关闭更改的文件。

.

f.read() 之后,文件的指针 f 必须重新激活才能写入

<font color= "#347C2C">readfalseloop2</font><br />

链在文件内容的末尾。

我不知道这次重新激活的原因是什么。我只知道如果不执行f.seek(0,1)指令,进程​​就不能从“读”模式切换到“写”模式。

f.seek(0,1) 表示“从当前位置移动 0 个字符”;给出另一个命令是没有用的,因为指针已经在文件的末尾,并且它无论如何都会在开始写入之前返回到文件的末尾,以防它在其他地方:那就是'a'模式特性。因此,即使通过 f.seek(0,0) 将指针再次定位到文件的开头,写入也会在结尾完成。

;

如果测试if 'readfalseloop2' in f.read() 给出False,指针必须移动f.seek(0,0 ) 到文件的最开头,以便新的后续阅读整个文件的内容。

.

警告:如果文件是用 utf-8 编写的,我不知道会发生什么,因为在 utf-8 中,字符不是由相同长度的字节表示的,这取决于字符。在我看来,即使使用 utf-8 也应该可以正常工作

.


编辑

我找到了一个更清晰更短的代码:

from time import sleep

with open(WebPath + SmokeTest,'r+') as f:
    while not 'readfalseloop2' in f.read():
        print '~',
        f.seek(0,0)
        sleep(2)

    f.seek(0,1)
    f.write('\n<font color= "#347C2C">readfalseloop2</font><br />')
    print 'True'

或者

from time import sleep

with open(WebPath + SmokeTest,'r') as f, open(WebPath + SmokeTest,'a') as g:
    while not 'readfalseloop2' in f.read():
        print '~',
        f.seek(0,0)
        sleep(2)

    g.write('\n<font color= "#347C2C">readfalseloop2</font><br />')
    print 'True'

8 行。 Python 很棒

关于python - 循环搜索字符串直到找到字符串 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857942/

相关文章:

python - 如何在 NumPy 数组中的特定列中乘以标量?

python - 匹配字符串中所有工作日名称的正则表达式

python PEX : Pack a package with its sub-packages

objective-c - 在(短)数组[] = {1、2、3}中转换 NSString @"123"?

image - 通过上传进行 Google 图片搜索

javascript - 如何查询美国城市的 wikipedia api

python - 如何在数值模拟中使用 jit

java - 为什么它在字符串中返回错误的重复次数?

javascript - 将原始字符串更改为字符串对象引用

javascript - 同时多个CreateTextRange