1

Код:

import re

with open('d.txt', 'r', encoding='utf-8') as file: text = file.read()

pre_spl = re.sub(r' ([\d])', r'\1', re.sub(r'[\r\n]', '', text, flags=re.S), flags=re.S) spl = [elem.strip(';') for elem in pre_spl.split('')]

if name == 'main': for s in spl: date_val, _, lst = s.partition('>>>') print(*[f'{date_val}>>>{elem}' for elem in lst.split(';')], sep='\n')

Скрипт выводит результат в консоль.Помогите пожалуйста, как правильно (в какую строку) вписать в код:

with open("result.txt", "w", encoding="utf-8") as file:

Чтобы результат(вывод) скрипта сохранялся в result.txt

insolor
  • 49,104
piton0x0
  • 71
  • 4
  • То что вы передаете в принт сохраните в переменную и запишите ее в файл. И в print потом выведите туже переменную если нужно. – Kers Feb 05 '21 at 11:39

2 Answers2

3

Можно сделать по нормальному, но я предложу интересный способ. Перенаправить стандартный вывод в файл:

import sys
sys.stdout = open('out.log', 'w')
  • @insolor А потому что зависит от цели. В некоторых случаях так удобно. Плюс никто не мешает кому-то другому написать другой ответ. Я лишь написал тот ответ, который хотел написать. – USERNAME GOES HERE Feb 22 '21 at 19:33
  • Ок, я добавлю тогда свой ответ. Рекомендую еще почитать дискуссию к этому ответу: https://ru.stackoverflow.com/a/709226 – insolor Feb 22 '21 at 19:39
  • @insolor Спасибо! – USERNAME GOES HERE Feb 22 '21 at 19:40
3

Открываете файл прямо перед циклом, в котором вы выводите данные, в print добавляете параметр file, через который указываете файловый объект, в который нужно выводить текст вместо консоли:

if __name__ == '__main__':
    with open("result.txt", "w", encoding="utf-8") as result_file:
        for s in spl:
            date_val, _, lst = s.partition('>>>')
            print(*[f'{date_val}>>>{elem}' for elem in lst.split(';')], sep='\n', file=result_file)
insolor
  • 49,104