2

我正在尝试在 python 中创建一个非常简单的日志解析器脚本。一切都按计划进行,除了目标机器上的脚本返回此错误(脚本在 unix 机器上工作,虽然很好):

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
4

2 回答 2

2

这是因为root = "testfolder/"它没有任何名称列表作为其属性。

根的类型是字符串

反过来看你的代码意味着,root = zipfile.ZipFile("/home/testuser/docs/testzip.zip", "r")产生了一个异常

在异常块中尝试使用except Exception, ex:然后打印ex.message以了解正在生成的异常类型

于 2013-01-10T08:16:50.293 回答
1

这是因为,namelist()仅适用于 a zipfile,而不适用于 a string

当 zip 文件无法打开时会发生这种情况。检查 zip 文件所在的路径。

试试这个,看看输出:

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

当我尝试使用有效的 zip 文件时,程序运行良好。

于 2013-01-10T08:20:59.587 回答