2015-01-21 116 views
0

我正在尝试将一组值写入文件。虽然,它会成功打印输出,当我尝试写入文件时,出现错误AttributeError: 'function' object has no attribute 'write'。代码如下:函数无法返回列表的值

time = open('Time_0', 'w+') 

iterations = 0 

def time(): 
    iteration_time = re.findall(r'^Time\s+=\s+(.*)', line) 
    for t in iteration_time: 
     global iterations 
     iterations = iterations +1 
     return (iteration_time, iterations) 

with open(logFile,'r') as logFile_read: 
    for line in logFile_read: 
     if 'Time' in line: 
      iterationTime = time() 
      print iterationTime 
      #time.write("%s" % iterationTime) 

的上述输出是如下(根据需要):

(['1'], 1) 
(['2'], 2) 
(['3'], 3) 
(['4'], 4) 
(['5'], 5) 
(['6'], 6) 
(['7'], 7) 
(['8'], 8) 
(['9'], 9) 
(['10'], 10) 

如果我去掉最后一行,time.write("%s" % iterationTime)并运行相同的代码,我得到`AttributeError的: '函数'对象没有属性'写'。

它似乎是微不足道的,但我无法看到这里发生了什么。 `

+0

'time'是一个函数(它影响外部作用域的'时间'),你需要写入一个文件对象。 – 2015-01-21 10:09:47

回答

0

您正试图使用​​time函数作为文件 - 这就是错误信息告诉你的。这个问题来自于您首先打开了Time_0文件并将其存储在time变量中,然后您正在定义覆盖先前打开的文件的time函数。

相反,你应该这样做:

iterations = 0 

def time(): 
    iteration_time = re.findall(r'^Time\s+=\s+(.*)', line) 
    for t in iteration_time: 
     global iterations 
     iterations = iterations +1 
     return (iteration_time, iterations) 

with open('Time_0', 'w+') as output_file: 
    with open(logFile,'r') as logFile_read: 
     for line in logFile_read: 
      if 'Time' in line: 
       iterationTime = time() 
       print iterationTime 
       output_file.write("%s" % iterationTime) 
+0

谢谢@kroolik – hypersonics 2015-01-22 23:28:20

0

您的文件open('Time_0', 'w+')和功能def time共享相同的名称。由于您在打开文件后定义了函数,因此time引用的是函数,而不是文件。为其中之一选择一个不同的名称。

+1

我建议为他们两个选择一个不同的名字。 'time'是标准模块的名称,所以使用它的变量名不是一个好习惯。这里没关系,但是它会导入导入'time'模块的程序时出现问题。此外,使用标准模块名称作为变量名称可能会让阅读代码的人感到困惑(至少令人讨厌)。 – 2015-01-21 10:53:20

+0

感谢每一位在这里帮助我解决这个微不足道的问题。 – hypersonics 2015-01-22 23:28:46

0

您使用手柄time,time = open('Time_0', 'w+')def time():所指的两个对象。由于def time():是后面的声明time,因此在调用time.write时指的是函数。重构名称。

0

您在此之后定义了time函数:time = open('Time_0', 'w+')

因此,Python将名称time重新命名为您的函数,因为您的函数没有write属性,所以您得到的错误是完全合理的。

0

我想你会遇到冲突使用'时间'一次作为该文件的处理程序,其次作为一个函数。

0
time = open('Time_0', 'w+') 

iterations = 0 

def time(): 

您有一个名为time变量和函数time。你必须改变其中之一。