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

时间:2015-01-01 17:02:03

标签: python loops random

我一直在尝试这个代码随机循环,直到找到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

4 个答案:

答案 0 :(得分:1)

你需要使用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

答案 1 :(得分:0)

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

试试这个。另外 with open 方法对于文件进程更好。如果您只想要一个随机数,那么只需将一个变量放在之外,而循环。

答案 2 :(得分:0)

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

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

import random
randrange = random.SystemRandom().randrange

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

while True将导致您的脚本永远运行,因此根据您要完成的操作,您需要添加一个" exit()"当你想要程序结束时的某个地方。

另外,你的"如果z在read_f" line失败,因为它需要一个字符串而不是随机数生成器的整数值。尝试"如果read_f中的str(z):"

答案 3 :(得分:0)

  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
    
  5. 注意:如果目标文件不包含随机数范围之间的任何整数,则代码将进入无限循环