2014-11-01 30 views
0

我遇到了一個我只是無法解決的問題。很簡單,我有2個文本文件,一個是處於Python line.split(':')len是2,但仍然是值錯誤

uncrackedHash:crackedHash 

格式和第二個文件hashes_found,EMAIL_LIST是格式爲:

email:uncrackedHash 

現在我想做要做的是打印出電子郵件和破解散列,如果未破解散列相同。

我不斷收到的錯誤是:

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

尚LEN(I)= 2

而且,我知道我打開文件是非常規的和不好的做法,它不應該影響代碼雖然。這正是我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 
+1

是否可以在文件中有空行? – warvariuc 2014-11-01 19:21:46

+0

無關但重要的錯誤:如果您重複循環訪問文件對象,則第一個之後的所有迭代都會將其視爲空。因此,內部for循環幾乎每次都會失敗。 – user2357112 2014-11-01 19:23:47

+0

len(i.split(':'))= 2感謝您的答案,那麼您如何繞過空行呢?這不是什麼嘗試/除了是什麼? – PelagicHacker 2014-11-01 19:24:19

回答

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是格式爲: 電子郵件:uncrackedHash – PelagicHacker 2014-11-01 19:29:06

+1

我不相信這樣的肯定。打印失敗時的值 – warvariuc 2014-11-01 19:32:42

+0

[email protected] 25097c51e8b82bdef8af9983f8daaf76打開電子郵件的結果太多,打開電子郵件,打開電子郵件,除了 – PelagicHacker 2014-11-01 19:36:39

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 2014-11-01 19:34:14

+0

如果'aux'長度爲1,這仍然會引發錯誤......這只是解決了問題,並沒有解決任何問題。 – Carpetsmoker 2014-11-01 20:16:19

相關問題