2012-06-26 73 views
1

在下面的for循环中,我试图理解为什么count的正确值仅在第一次循环运行时返回。为什么计数的正确值首次返回for循环?

我正在创建一个解析程序来查找文本文件中的某些字符串并对它们进行计数。不过,我在一个地方遇到了一些麻烦。

def callbrowse(): 
    filename = tkFileDialog.askopenfilename(filetypes = (("Text files", "*.txt"),("HTML files", ".html;*.htm"),("All files", "*.*"))) 
    print filename 
    try: 
     global filex 
     global writefile 
     filex = open(filename, 'r') 
     print "Success!!" 
     print filename 
    except: 
     print "Failed to open file" 

######This returns the correct count only the first time it is run. The next time it ######returns 0. If the browse button is clicked again, then this function returns the ######correct count again. 
def count_errors(error_name): 
    count = 0 
    for line in filex: 
     if error_name == "CPU > 79%": 
      stringparse = "Utilization is above" 
     elif error_name == "Stuck touchscreen": 
      stringparse = "Stuck touchscreen" 
     if re.match("(.*)" + "Utilization is above" + "(.*)",line): 
      count = count + 1 
    return count 

感谢您的任何帮助。我似乎无法让这个工作正确。

+0

嗯......你的代码很难阅读。请尝试添加一些换行符和缩进以使其更清晰。 – carmenism

+1

我没有看到你实际调用count_errors的代码中的一个点... – mnowotka

回答

5

该方法只在第一次工作,因为该文件传递到最后。 如果再次调用该方法,则不再有行。 通过在for循环之前调用filex.seek(0)来重置文件位置。