Python 使用来自tkinter的askopenfile()的输入创建列表

Python 使用来自tkinter的askopenfile()的输入创建列表,python,tkinter,brute-force,Python,Tkinter,Brute Force,使用带有密码文件的askopenfile()创建列表时遇到问题。我用它来处理用户名,但由于rockyou.txt和密码文件有特殊字符,我不得不将其转换为UTF-8,我对用户名使用的相同方法是逐字符而不是逐字生成列表 用户名: def open_file(): file = askopenfile(mode ='r', filetypes =[('Text Files', '*.txt')]) content = [] userlist = [] if file i

使用带有密码文件的askopenfile()创建列表时遇到问题。我用它来处理用户名,但由于rockyou.txt和密码文件有特殊字符,我不得不将其转换为UTF-8,我对用户名使用的相同方法是逐字符而不是逐字生成列表

用户名:

def open_file():
    file = askopenfile(mode ='r', filetypes =[('Text Files', '*.txt')])
    content = []
    userlist = []
    if file is not None:
        content = file.readlines()
        for line in content:
            userlist.append(line.strip('\n'))
        print(userlist)
['3d', 'a', 'a1', 'aa', 'aaberg', 'aachen', 'aalborg', 'aalesund', 'aalii', 'aalst', 'aalto', 'aam', 'aara', 'aarau']
def open_file2():
    file2 = askopenfile(mode ='rb', filetypes =[('Text Files', '*.txt')])
    content2 = []
    passlist = []
    if file2 is not None:
        content2 = file2.read().decode('utf-8')
        for line in passes:
            passlist.append(line.strip('\n'))
        print(passlist)
['!', '!', '!', '4', '5', '4', '5', '\r', '\n', '!', '"', '¹', '1', '2', '3', '\r', '\n', '!', '"', '¹', ';', '1', '2', '3', '4', '\r', '\n']
用户名输出:

def open_file():
    file = askopenfile(mode ='r', filetypes =[('Text Files', '*.txt')])
    content = []
    userlist = []
    if file is not None:
        content = file.readlines()
        for line in content:
            userlist.append(line.strip('\n'))
        print(userlist)
['3d', 'a', 'a1', 'aa', 'aaberg', 'aachen', 'aalborg', 'aalesund', 'aalii', 'aalst', 'aalto', 'aam', 'aara', 'aarau']
def open_file2():
    file2 = askopenfile(mode ='rb', filetypes =[('Text Files', '*.txt')])
    content2 = []
    passlist = []
    if file2 is not None:
        content2 = file2.read().decode('utf-8')
        for line in passes:
            passlist.append(line.strip('\n'))
        print(passlist)
['!', '!', '!', '4', '5', '4', '5', '\r', '\n', '!', '"', '¹', '1', '2', '3', '\r', '\n', '!', '"', '¹', ';', '1', '2', '3', '4', '\r', '\n']
(只是一部分,因为它很长,但其中的想法)

密码:

def open_file():
    file = askopenfile(mode ='r', filetypes =[('Text Files', '*.txt')])
    content = []
    userlist = []
    if file is not None:
        content = file.readlines()
        for line in content:
            userlist.append(line.strip('\n'))
        print(userlist)
['3d', 'a', 'a1', 'aa', 'aaberg', 'aachen', 'aalborg', 'aalesund', 'aalii', 'aalst', 'aalto', 'aam', 'aara', 'aarau']
def open_file2():
    file2 = askopenfile(mode ='rb', filetypes =[('Text Files', '*.txt')])
    content2 = []
    passlist = []
    if file2 is not None:
        content2 = file2.read().decode('utf-8')
        for line in passes:
            passlist.append(line.strip('\n'))
        print(passlist)
['!', '!', '!', '4', '5', '4', '5', '\r', '\n', '!', '"', '¹', '1', '2', '3', '\r', '\n', '!', '"', '¹', ';', '1', '2', '3', '4', '\r', '\n']
密码输出:

def open_file():
    file = askopenfile(mode ='r', filetypes =[('Text Files', '*.txt')])
    content = []
    userlist = []
    if file is not None:
        content = file.readlines()
        for line in content:
            userlist.append(line.strip('\n'))
        print(userlist)
['3d', 'a', 'a1', 'aa', 'aaberg', 'aachen', 'aalborg', 'aalesund', 'aalii', 'aalst', 'aalto', 'aam', 'aara', 'aarau']
def open_file2():
    file2 = askopenfile(mode ='rb', filetypes =[('Text Files', '*.txt')])
    content2 = []
    passlist = []
    if file2 is not None:
        content2 = file2.read().decode('utf-8')
        for line in passes:
            passlist.append(line.strip('\n'))
        print(passlist)
['!', '!', '!', '4', '5', '4', '5', '\r', '\n', '!', '"', '¹', '1', '2', '3', '\r', '\n', '!', '"', '¹', ';', '1', '2', '3', '4', '\r', '\n']
(也只是一部分)

但是问题是密码列表是按字符而不是逐字创建的。有没有一种方法可以让我目前使用的方法一字不差地表达出来?还有没有更好的方法来打开文件,类似于第一种方法


如果有人害怕回答,这是我的最后一个项目(网络安全)。我现在只是想把它转换成一个图形用户界面,让事情变得更加有趣。

我想你的主要问题是

对于行输入过程:

content2.splitlines()中的行应该是
。。。我想。。。我也对转换为utf8的必要性表示怀疑…但是meh

不要将字符串解码为utf8。。。只需使用字节

def open_file2():
    file2 = askopenfile(mode ='rb', filetypes =[('Text Files', '*.txt')])
    content2 = []
    passlist = []
    if file2 is not None:
        content2 = file2.read()
        for line in content2.splitlines():
            passlist.append(line.strip(b'\n')) # make sure to use bytes here
        print(passlist)

我认为你关于必须转换为utf8的第一个假设是错误的…请不要包括问题的答案(而是作为单独的答案发布)。谢谢你的回复!我试过你的建议,但似乎也有同样的效果。还有,我有没有别的办法?当我尝试以这种方式读取文件时:def open_file2():file2=askopenfile(mode='r',filetypes=[('Text Files','*.txt')])content2=[]passlist=[]如果file2不是None:content2=file2.readlines()#passlist=list(content2)对于content2中的行:passlist.append(line.strip('\n'))打印(passlist)我得到:UnicodeDecodeError:“charmap”编解码器无法解码位置2023中的字节0x90:未定义字符映射到
过程
<代码>内容2似乎是文件的文本内容。。。忽略utf8注释,因为这不太可能是您的问题。。。。您需要使用
content2.splitlines()
拆分content2以返回单独的行而不是每个字符(不确定这些文件的格式…您可能需要执行
content2.split(“某物”)
而不是行基于您的错误,它实际上似乎与解码调用有很大关系。。。