2013-01-10 231 views
2

我想在python中創建一個非常簡單的日誌解析器腳本。按計劃,除了在目標機器上的腳本返回該錯誤一切都(腳本工作的UNIX機器雖然是很細的):Python AttributeError:'str'對象沒有屬性'namelist'

for name in root.namelist(): 
Attribute Error: 'str' object has no attribute 'namelist' 

Python版本似乎是在兩臺機器上相同(2.7.3 )。有任何想法嗎?

腳本本身:

import zipfile 
import os 
import re 

string1 = "searchstring" # raw_input("usrinput: ") 

try: 
    root = zipfile.ZipFile("/home/testuser/docs/testzip.zip", "r") 
except: 
    root = "testfolder/" 
for name in root.namelist(): 
    if name.find(".") > 0: 
     f = root.open(name) 
     searchlines = f.readlines() 
     for i, line in enumerate(searchlines): 
      regex1 = "(.*)" + re.escape(string1) + "(.*)" 
      if re.match (regex1, line): 
       for l in searchlines[i-4:i+4]: print l, 
       print 
+0

這意味着'except'塊被執行,'root'現在是一個字符串''testfolder /「'。 –

+1

專業提示:不要使用blanket'except'語句;你現在不知道你的'zipfile.ZipFile()'調用有什麼問題。 –

+0

硬編碼路徑永遠不是一個好主意 – asermax

回答

2

這是因爲它root = "testfolder/"沒有任何名稱列表作爲其屬性。

輸入root的是串

而這又在看你的代碼意味着,root = zipfile.ZipFile("/home/testuser/docs/testzip.zip", "r")產生異常塊試異常

使用except Exception, ex:,然後打印ex.message瞭解異常的類型產生

+0

謝謝大家的答案。我刪除了整個Except,因爲我發現在這種情況下沒有必要。真正的罪魁禍首是從Windows機器上的總指揮官複製到zip文件的路徑。它以某種方式大寫了文件夾名稱。 – panta

1

這是因爲,namelist()僅適用於zipfile,而不適用於string

當壓縮文件無法打開時會發生這種情況。檢查壓縮文件所在的路徑。

試試這個,看看輸出:

try: 
    root = zipfile.ZipFile("/home/testuser/docs/testzip.zip", "r") 
except Exception, msg: 
    print msg 
    root = "testfolder/" 

當我與一個有效的zip文件試過了,程序運行良好。

相關問題