Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅迭代仅在“打开”开头可用的行_Python - Fatal编程技术网

Python 仅迭代仅在“打开”开头可用的行

Python 仅迭代仅在“打开”开头可用的行,python,Python,我正在创建一个程序,该程序应该使用给定字符的所有可能组合创建一个文件,并将它们放入一个文件中。当然,它会一直持续下去,直到我停止它,或者直到我的内存耗尽 不过,我的想法是,代码读取文件并迭代这些行,同时生成新行。不过,我不希望它在新行上迭代,因为它正在这样做。有什么帮助吗 import time, os char_list = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" start_time = time.t

我正在创建一个程序,该程序应该使用给定字符的所有可能组合创建一个文件,并将它们放入一个文件中。当然,它会一直持续下去,直到我停止它,或者直到我的内存耗尽

不过,我的想法是,代码读取文件并迭代这些行,同时生成新行。不过,我不希望它在新行上迭代,因为它正在这样做。有什么帮助吗

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()

为了形成这些组合,我们可以使用函数,它创建了传递给它的iterables的集合。此函数返回一个迭代器,因此您可以循环遍历它生成的元组,而无需将它们存储到列表中

这里有一个小演示,您可以根据自己的目的进行修改

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()

这个程序非常简单,所以如果你不耐烦地等待它生成一个大的密码,你必须点击CtrlC来杀死它

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

这里有一个小演示,您可以根据自己的目的进行修改

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()

这个程序非常简单,所以如果你不耐烦地等待它生成一个大的密码,你必须点击CtrlC来杀死它

你为什么不能把代码放在问题中而不是放在pastebin中?我对它的工作原理不是很熟悉,我现在就试试。你说的任何帮助是什么意思?您的问题/问题到底是什么?您将所有这些字符串写入文件的原因是什么?如果你只是试图创建所有的组合,直到找到一个等于
密码的组合,你就不需要这样做了。顺便说一句,在这个内部循环中创建
x[:-1]+i
字符串3次是没有效率的。有什么原因你不能把代码放在问题中而不是放在pastebin中吗?我对它的工作原理不是很熟悉,我现在就试试。你说什么帮助?您的问题/问题到底是什么?您将所有这些字符串写入文件的原因是什么?如果您只是尝试创建所有组合,直到找到一个等于
password
的组合,则不需要这样做。顺便说一句,在该内部循环中创建
x[:-1]+i
字符串3次是低效的。