2010-01-06 112 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') 

代替

相关问题