2010-01-06 140 views
0

我正在創建一個電子郵件響應過夜構建,我想從結果文件中獲取最後50行並將其放入摘要文件中。我所做的代碼如下,任何人都可以幫忙嗎?如何將最後50行從一個文件寫入另一個文件Python

def email_success(): 

    fp = open(results_file, 'r') 

    sum_file = (fp.readlines()[-50:]) 
    fp.close() 

    myfile = open(result_summary,'w') 

    myfile.write(sum_file) 
    myfile.close() 

我有嘗試此代碼時,下面的錯誤消息:

Traceback (most recent call last): 
    File "email_success.py", line 76, in <module> 
    if __name__ == '__main__': myObject = email_success() 
    File "email_success.py", line 45, in email_success 
    myfile = open(result_summary,'w') 
TypeError: coercing to Unicode: need string or buffer, tuple found 

感謝

結果總結是存儲地址的變量。

result_summary = (t, 'results_summary.txt') 

對不起犯了一個愚蠢的錯誤,我忘了補充os.path.join

result_summary = os.path.join(t, 'results_summary.txt') 

感謝您的幫助

@alok這是一個目錄地址,我忘了加上os.join使它成爲一個字符串。這是什麼導致錯誤

+0

你使用python 3嗎? – Pod 2010-01-06 10:07:27

+0

用'writelines'代替'write',並且除去'readlines()'調用周圍的'()'。 – 2010-01-06 10:07:34

+0

@chris:你認爲'開'((t,'results_summary.txt'),'w')'是什麼意思? – 2010-01-06 10:19:43

回答

2

result_summary是一個元組,它需要是str或緩衝區。你的解釋與你發佈的錯誤無關。

5
TypeError: coercing to Unicode: need string or buffer, tuple found 

錯誤說,它預計字符串或緩衝區,但你逝去的tuple,所以只是""加入它,使其向弦

所以,儘量

sum_file = "".join(fp.readlines()[-50:]) 

UPDATE:因爲OP更新了問題

if result_summary = (t, 'results_summary.txt')

嘗試

myfile = open(result_summary[1],'w') 
0

fp.readlines()方法返回行的列表。 因此,您不能應用[-50:]運營商。

+0

這是錯誤的,當'a'是'list'類型時,你肯定可以做'a [-50:]'。 – 2010-01-06 10:28:37

2

它的開放()引發例外,雖然...你是如何定義result_summary?

1
result_summary = (t, 'results_summary.txt') 

myfile = open(result_summary,'w') 

意味着

myfile = open((t, 'results_summary.txt'),'w') 

這顯然是行不通的,請嘗試:

myfile = open(result_summary[1],'w') 

代替

相關問題