如何将最后50行从一个文件写入另一个文件

时间:2010-01-06 10:05:33

标签: python

我正在创建一个过夜构建的电子邮件回复,我想从结果文件中获取最后50行并将其放入摘要文件中。我所做的代码如下,有人可以帮忙吗?

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使它成为一个字符串。这是造成错误的原因

5 个答案:

答案 0 :(得分:5)

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

错误表示它的预期字符串或缓冲区,但您传递tuple,因此只需将其与""连接即可使其成为字符串

所以,试试

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

更新:因为OP更新了问题

如果result_summary = (t, 'results_summary.txt')

尝试

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

答案 1 :(得分:2)

它是open()引发异常但是......你是如何定义result_summary的?

答案 2 :(得分:2)

result_summary是一个元组,它必须是str或缓冲区。您的解释与您发布的错误无关。

答案 3 :(得分: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')

代替

答案 4 :(得分:0)

fp.readlines()方法返回一个行列表。 因此,您无法应用[-50:]运算符。