读取文件直到找到 python 的匹配项

Reading a file until a match found with python

我一直在尝试让这段代码随机循环,直到在 lookin.txt 文件中找到匹配项,并在找到匹配项时停止,但没有成功,因为我的 Python 知识并不那么丰富。代码只工作一次,但我需要它连续运行直到找到匹配项。如果有人能指导我正确的方向,我将不胜感激。

        #! /usr/bin/env python
import random
randrange = random.SystemRandom().randrange
z = randrange( 1, 1000)

target_f = open("lookin.txt", 'rb')
read_f = target_f.read()
if z in read_f:
    file = open('found.txt', 'ab')
    file.write(z)
    print "Found ",z
else:
    print "Not found ",z

Lookin.txt:

453
7
8
56
78
332

您需要使用 while 并更改随机数:

#!/usr/bin/env python
import random
target_f = open("lookin.txt", 'rb')
read_f = target_f.read()
while True:                         # you need while loop here for looping
    randrange = random.SystemRandom().randrange
    z = str(randrange( 1, 1000))
    if z in read_f:
        file = open('found.txt', 'ab')
        file.write(z)
        file.close()
        print "Found ",z
        break      # you can break or do some other stuff
    else:
        print "Not found ",z
import random
running=True
while running:
    a=random.randint(1,1000)
    with open ("lookin.txt") as f:
        rl=f.readlines()
        for i in rl:
            if int(i)==a:
                print ("Match found")
                with open("found.txt","w") as t:
                    t.write(str(a))
                    running=False

尝试 this.Also with open 方法更适合文件处理。如果你只想要一个随机数,那么你可以将 a 变量放在 while 循环之外。

"z = randrange(1,1000)" 给你一个随机数,脚本的其余部分会读取整个文件并尝试将该数字与文件匹配。

相反,将脚本放入循环中以使其继续尝试。

import random
randrange = random.SystemRandom().randrange

while True:
    z = randrange( 1, 1000)
    DO YOUR SEARCH HERE

while True 会导致你的脚本永远 运行 所以根据你想要完成的事情,你需要在你想要程序结束的时候添加一个 "exit()" .

此外,您的 "if z in read_f" 行失败了,因为它需要一个字符串而不是来自随机数生成器的整数值。尝试 "if str(z) in read_f:"

  1. 我们只能从目标文件中获取整数值(与语句一起使用来读取文件)并创建字典,该字典获取关键搜索的常数时间。
  2. 应用 while 循环在文件中找到随机数,即在创建的字典中。
  3. 如果在字典中找到随机数,则添加到 found.txt 并破解代码。
  4. 如果没有找到随机数,则继续寻找下一个随机数。

    import random
    randrange = random.SystemRandom().randrange
    
    with open("lookin.txt", 'rb') as target_f:
        tmp = [int(i.strip()) for i in target_f.read().split('\n') if i.isdigit() ]
        no_dict  =  dict(zip(tmp, tmp)) 
    
    while 1:
        z = randrange( 1, 1000)
        if z in no_dict:
            with open('found.txt', 'ab') as target_f:
                target_f.write("\n"+str(z))
            print "Found ",z
            break
        else:
            print "Not found ",z
    

注意:如果目标文件不包含随机数范围内的任何整数,那么代码将进入无限循环.