Как записать последние 50 строк из одного файла в другой Python - PullRequest
0 голосов
/ 06 января 2010

Я создаю ответ по электронной почте для ночной сборки, я хочу получить последние 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 ]

5 голосов
/ 06 января 2010
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 голосов
/ 06 января 2010

result_summary - это кортеж, он должен быть либо str, либо буфером. Ваше объяснение не имеет никакого отношения к сообщенной вами ошибке.

2 голосов
/ 06 января 2010

Это open () вызывает исключение, хотя ... как вы определили result_summary?

1 голос
/ 06 января 2010
result_summary = (t, 'results_summary.txt')

и

 myfile = open(result_summary,'w')

означает

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

что явно не сработает, попробуйте:

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

вместо

0 голосов
/ 06 января 2010

fp.readlines() метод возвращает список строк. Поэтому вы не можете применить [-50:] оператор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...