保存 itertools 产品循环值,然后从上次结果恢复
Save itertools product loop value and then resume from the last result
我正在使用这段代码来破解一个简单的密码 mycubana,但我想 "pause" itertools 循环,以便在一段时间后我可以恢复循环从最后保存的 itertools.product
值开始。有什么方法可以在不更改大量代码的情况下做到这一点吗?
代码:
import string
from itertools import chain, product
def bruteforce(charset, minlenght, maxlenght):
return(''.join(candidate)
for candidate in chain.from_iterable(product(charset, repeat = i)
for i in range(minlenght, maxlenght)))
contador = 0
for attempt in bruteforce(string.ascii_lowercase, 8, 9):
codigo = 'mycubana'
contador+=1
if attempt==codigo:
print(attempt)
contador=0
是的,其实很简单。使用您的环境和 bruteforce
的定义,以下代码将对生成的序列执行两次运行,每次运行 10 个候选对象:
bf26_8 = bruteforce(string.ascii_lowercase, 8, 9)
count = 0
for c in bf26_8:
count += 1
print(c)
if count == 10:
break
print("======== PAUSED ========")
for c in bf26_8:
count += 1
print(c)
if count == 20:
break
"trick"是将bruteforce
的结果存储在一个变量中。该结果是 generator,因此如果您对其进行迭代,但不要耗尽它(即,打破迭代循环),一旦您再次开始迭代,它将为您提供延续值。
我正在使用这段代码来破解一个简单的密码 mycubana,但我想 "pause" itertools 循环,以便在一段时间后我可以恢复循环从最后保存的 itertools.product
值开始。有什么方法可以在不更改大量代码的情况下做到这一点吗?
代码:
import string
from itertools import chain, product
def bruteforce(charset, minlenght, maxlenght):
return(''.join(candidate)
for candidate in chain.from_iterable(product(charset, repeat = i)
for i in range(minlenght, maxlenght)))
contador = 0
for attempt in bruteforce(string.ascii_lowercase, 8, 9):
codigo = 'mycubana'
contador+=1
if attempt==codigo:
print(attempt)
contador=0
是的,其实很简单。使用您的环境和 bruteforce
的定义,以下代码将对生成的序列执行两次运行,每次运行 10 个候选对象:
bf26_8 = bruteforce(string.ascii_lowercase, 8, 9)
count = 0
for c in bf26_8:
count += 1
print(c)
if count == 10:
break
print("======== PAUSED ========")
for c in bf26_8:
count += 1
print(c)
if count == 20:
break
"trick"是将bruteforce
的结果存储在一个变量中。该结果是 generator,因此如果您对其进行迭代,但不要耗尽它(即,打破迭代循环),一旦您再次开始迭代,它将为您提供延续值。