Python line.split(';:';)len为2,但仍然存在值错误

Python line.split(';:';)len为2,但仍然存在值错误,python,email,split,Python,Email,Split,我遇到了一个我无法解决的问题。很简单,我有两个文本文件,一个是hash_found,格式为 uncrackedHash:crackedHash 第二个文件,电子邮件列表的格式为: email:uncrackedHash 现在我要做的是,打印出电子邮件和破解的散列,如果未破解的散列是相同的 我经常遇到的错误是: email, uncracked = i.split(':') ValueError: too many values to unpack 然而len(i)=2 另外,我知道我打开文

我遇到了一个我无法解决的问题。很简单,我有两个文本文件,一个是hash_found,格式为

uncrackedHash:crackedHash
第二个文件,电子邮件列表的格式为:

email:uncrackedHash
现在我要做的是,打印出电子邮件和破解的散列,如果未破解的散列是相同的

我经常遇到的错误是:

email, uncracked = i.split(':')
ValueError: too many values to unpack
然而len(i)=2

另外,我知道我打开文件是非常规的,而且是不好的做法,但它不应该影响代码。这正是我两年前学习Python的方式,一旦我学会了正确的方法,我就会进入这个惯例

hashes_found = open('hashes_found.txt', 'r')
email_list = open('email_list.txt', 'r')

for i in email_list:
    i = i.strip()
    email, uncracked = i.split(':')

    for j in hashes_found:
        j = j.strip()

        try:
            uncracked_2, cracked = j.split(':')
        except Exception,e:
            print e
            continue

        if uncracked == uncracked_2:
            print email, ':', cracked
        else:
            continue
你说
len(i)
是2,但这与
len(i.split(“:”)
不同

我猜:您有空行,并且使用DOS格式(因此该行是
\r\n

要跳过空行,请执行以下操作:

for i in email_list:
    i = i.strip()

    if i == '':
        continue
也可能该行没有
,您可以使用以下内容跳过这些内容:

for i in email_list:
    i = i.strip()

    if i == '':
        continue

    try:
        email, uncracked = i.split(':')
    except ValueError:
        print("Warning: this line has no `:'\n  %s" % i, file=sys.stderr)
        # Or python2:
        # print >> sys.stderr, "Warning: this line has no `:'\n  %s" % i
        continue

您可以使用aux变量:

    hashes_found = open('hashes_found.txt', 'r')
    email_list = open('email_list.txt', 'r')

    for i in email_list:
        aux = i.strip('\r\n').split(':')

        email= aux[0]
        uncracked = aux[1]

可能是文件中有空行吗?不相关但关键的错误:如果重复循环文件对象,第一次迭代之后的所有迭代都会将其视为空。因此,for的内部
循环几乎每次都会失败。len(i.split(“:”)=2感谢您的回答,那么如何绕过空行呢?这不是try/except的作用吗?将失败语句放在
try/except
中,并在
except
中打印
i
的值,branchI可能是错误的,但这不应该是电子邮件列表中i的
而不是
对于电子邮件列表中的i:
?找到的哈希格式为uncrackedHash:crackedHash,第二个文件,电子邮件列表格式为:email:uncrackedHash。我不相信这样的肯定。输入值时打印该值failsladida@hahaha.ru25097c51e8b82bdef8af9983f8daaf76要解包的值太多是由于打印电子邮件导致的,未破解,e除了您应该
print i
,否则您正在打印
email
untracked
之前的值,我将对此进行研究,但是我觉得我不应该需要这个来让我的代码正常工作。感谢您的回答如果
aux
的长度为1,则仍将引发错误。。。这只是解决了问题,没有解决任何问题。