2014-11-01 3 views
0

У меня возникла проблема, которую я просто не смог решить. Проще говоря, у меня есть 2 текстовых файлов, один является hashes_found, который находится в форматеPython line.split (':') len is 2, но все еще значение Ошибка

uncrackedHash:crackedHash 

и второй файл, email_list в формате:

email:uncrackedHash 

Теперь я пытаюсь сделать, это распечатать сообщение электронной почты и взломать хэш, если неотображенный хеш - то же самое.

Ошибка я получаю это:

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

все же LEN (я) = 2

Кроме того, я знаю, что мои открытия файлов необычна и плохая практика, это не должно влиять на код. Именно так я узнал Python 2 года назад, и я войду в это соглашение, как только узнаю правильный путь.

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 
+1

Возможно, у вас есть пустые строки в файле? – warvariuc

+0

Несвязанная, но критическая ошибка: если вы повторяете многомерный файл, все итерации после первого будут выглядеть пустыми. Таким образом, внутренний цикл 'for' будет терпеть неудачу почти каждый раз. – user2357112

+0

len (i.split (':')) = 2 Спасибо за ответы, как вы обходите пустые строки? Разве это не то, для чего предназначена попытка/исключение? – PelagicHacker

ответ

1

Вы говорите, что 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 
+0

hashes_found находится в формате uncrackedHash: crackedHash и второй файл, email_list в формате: email: uncrackedHash – PelagicHacker

+1

Я не доверяю таким утверждениям. Распечатайте значение, если оно не сработало – warvariuc

+0

[email protected] 25097c51e8b82bdef8af9983f8daaf76 слишком много значений для распаковки является результатом печати электронной почты, не отслеживается, e за исключением – PelagicHacker

0

Вы можете использовать переменную Окс :

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] 
+0

Я рассмотрю это, но я чувствую, что мне не нужно это, чтобы заставить мой код работать.Спасибо за ответ – PelagicHacker

+0

Это все равно вызовет ошибку, если 'aux' имеет длину 1 ... это просто перемещает проблему и ничего не решает. – Carpetsmoker

Смежные вопросы