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

0 投票
5 回答
1450 浏览
提问于 2025-04-15 17:41

我正在创建一个邮件回复,内容是关于一个过夜构建的结果。我想从结果文件中提取最后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 个回答

2

其实是open()这个函数引发了异常……你是怎么定义result_summary的呢?

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

错误提示说它期待的是字符串或者缓冲区,但你传入的是一个tuple(元组),所以只需要用""把它连接起来,变成字符串就可以了。

所以,试试这样做:

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

更新: 因为提问者更新了问题

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

那么试试:

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

result_summary 是一个元组,它需要是一个 str(字符串)或者缓冲区。你的解释和你提到的错误没有关系。

撰写回答