仅迭代仅在打开时可用的行

时间:2017-03-12 15:30:29

标签: python

我正在创建一个程序,该程序应该创建一个包含给定字符的每种可能组合的文件并将它们放在一个文件中。它当然要等到我停止它或者直到我的记忆力明显耗尽。

虽然,我的想法是代码读取文件并迭代THOSE行,同时创建新行。我不希望它迭代新行,它正在做。有什么帮助吗?

import time, os

char_list = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
start_time = time.time()
password = "aaa"
file_name = "file.txt"

with open(file_name, "w+") as f:
    for i in char_list:
        f.write(i+"\n") 

with open(file_name, "a+") as f:
    for x in f:
        for i in char_list:
            f.write(x[:-1]+i+"\n")
            print(x[:-1]+i)
            if x[:-1]+i == password:
                    break


print("%s was found after %ss!"%(password, time.time()-start_time))

input()

1 个答案:

答案 0 :(得分:2)

要形成这些组合,我们可以使用itertools.product函数,它会创建传递它的迭代的Cartesian product。此函数返回一个迭代器,因此您可以循环它生成的元组,而无需将它们存储到列表中。

这是一个小型演示,您可以根据自己的需要进行修改。

from itertools import product

def all_products(char_list, password):
    count = 1
    while True:
        for t in product(char_list, repeat=count):
            s = ''.join(t)
            print(s, end=', ')
            if s == password:
                return
        count += 1

all_products('abcdefghijklmnopqrstuvwxyz', 'help')
print()

这个程序非常简单,所以你必须按 Ctrl C 来杀死它,如果你不耐烦等待它生成一个大密码。