读取文件直到找到 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:"
- 我们只能从目标文件中获取整数值(与语句一起使用来读取文件)并创建字典,该字典获取关键搜索的常数时间。
- 应用 while 循环在文件中找到随机数,即在创建的字典中。
- 如果在字典中找到随机数,则添加到 found.txt 并破解代码。
如果没有找到随机数,则继续寻找下一个随机数。
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
注意:如果目标文件不包含随机数范围内的任何整数,那么代码将进入无限循环.
我一直在尝试让这段代码随机循环,直到在 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:"
- 我们只能从目标文件中获取整数值(与语句一起使用来读取文件)并创建字典,该字典获取关键搜索的常数时间。
- 应用 while 循环在文件中找到随机数,即在创建的字典中。
- 如果在字典中找到随机数,则添加到 found.txt 并破解代码。
如果没有找到随机数,则继续寻找下一个随机数。
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
注意:如果目标文件不包含随机数范围内的任何整数,那么代码将进入无限循环.