2015-01-21 163 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。你必須改變其中之一。