逐行读取TXT文件 - Python

时间:2017-04-04 12:07:07

标签: python list python-3.x brute-force

如何告诉python逐行读取txt列表? 我使用的.readlines()似乎并没有起作用。

import itertools
import string
def guess_password(real):
    inFile = open('test.txt', 'r')
    chars = inFile.readlines()
    attempts = 0
    for password_length in range(1, 9):
        for guess in itertools.product(chars, repeat=password_length):
            attempts += 1
            guess = ''.join(guess)
            if guess == real:
                return input('password is {}. found in {} guesses.'.format(guess, attempts))
        print(guess, attempts)

print(guess_password(input("Enter password")))

test.txt文件如下所示:

1:password1
2:password2
3:password3
4:password4

目前该程序仅适用于列表中的最后一个密码(password4) 如果输入任何其他密码,它将运行列表中的所有密码并返回"无"。

所以我假设我应该告诉python一次测试一行?

PS。 "返回输入()"是一个输入,因此对话框不会自动关闭,无法输入。

2 个答案:

答案 0 :(得分:3)

readlines返回包含文件中所有剩余行的字符串列表。正如python文档所述,您也可以使用list(inFile)来阅读所有ines(https://docs.python.org/3.6/tutorial/inputoutput.html#methods-of-file-objects

但问题是python会读取包含换行符(\n)的行。并且只有最后一行在您的文件中没有换行符。因此,通过比较guess == real,您比较'password1\n' == 'password1' False

要删除换行符,请使用rstrip

chars = [line.rstrip('\n') for line in inFile]

这一行而不是:

chars = inFile.readlines()

答案 1 :(得分:1)

首先尝试搜索重复的帖子。

How do I read a file line-by-line into a list?

例如,我在处理txt文件时经常使用的内容:

lines = [line.rstrip('\n') for line in open('filename')]