Направление вывода на печать в.txt файл в Python 3

Есть ли способ сохранить весь вывод печати в txt файле в python? Допустим, у меня есть эти две строки в моем коде, и я хочу сохранить вывод печати в файл с именем output.txt.

print ("Hello stackoverflow!")
print ("I have a question.")

Я хочу, output.txt файл output.txt содержал

Hello stackoverflow!
I have a question.

Ответы

Ответ 1

Дайте print аргумент ключевого слова file, где значением аргумента является файловый поток. Мы можем создать поток файлов, используя функцию open:

print("Hello stackoverflow!", file=open("output.txt", "a"))
print("I have a question.", file=open("output.txt", "a"))

Из документации Python о print:

Аргумент file должен быть объектом с методом write(string); если он отсутствует или None, будет использоваться sys.stdout.

И документация для open:

Откройте file и верните соответствующий объект файла. Если файл не может быть открыт, возникает OSError.

"A "a" качестве второго аргумента open означает "append" - другими словами, существующее содержимое файла не будет перезаписано. Если вы хотите, чтобы файл был перезаписан, используйте "w".


Однако открытие файла с open много раз не идеально для производительности. В идеале вы должны открыть его один раз и назвать его, а затем передать эту переменную в опцию file print. Вы должны помнить, чтобы закрыть файл после этого!

f = open("output.txt", "a")
print("Hello stackoverflow!", file=f)
print("I have a question.", file=f)
f.close()

Для этого также существует синтаксический ярлык with блоком with. Это закроет ваш файл в конце блока для вас:

with open("output.txt", "a") as f:
    print("Hello stackoverflow!", file=f)
    print("I have a question.", file=f)

Ответ 2

Вы можете перенаправить stdout в файл "output.txt":

import sys
sys.stdout = open('output.txt','wt')
print ("Hello stackoverflow!")
print ("I have a question.")

Ответ 3

Использовать модуль регистрации

def init_logging():
    rootLogger = logging.getLogger('my_logger')

    LOG_DIR = os.getcwd() + '/' + 'logs'
    if not os.path.exists(LOG_DIR):
        os.makedirs(LOG_DIR)
    fileHandler = logging.FileHandler("{0}/{1}.log".format(LOG_DIR, "g2"))
    rootLogger.addHandler(fileHandler)

    rootLogger.setLevel(logging.DEBUG)

    consoleHandler = logging.StreamHandler()
    rootLogger.addHandler(consoleHandler)

    return rootLogger

Получить регистратор:

logger = init_logging()

И запустите logging/output (ing):

logger.debug('Hi! :)')

Ответ 4

Другая вариация может быть... Обязательно закройте файл после этого

import sys
file = open('output.txt', 'a')
sys.stdout = file

print("Hello stackoverflow!") 
print("I have a question.")

file.close()

Ответ 5

Другой способ, при котором вообще не нужно обновлять код Python, - это перенаправить через консоль.

Обычно, как обычно, ваш скрипт Python print() вызывает скрипт из командной строки и использует перенаправление командной строки. Как это:

$ python ./myscript.py > output.txt

Ваш файл output.txt теперь будет содержать весь вывод вашего скрипта Python.

Ответ 6

Предположим, мой входной файл - "input.txt", а выходной - "output.txt":

Давайте рассмотрим, что во входном файле есть детали для чтения: 5 1 2 3 4 5

================================================== ============

import sys

sys.stdin = open("input", "r")
sys.stdout = open("output", "w")

print("Reading from input File : ")
n = int(input())
print("Value of n is :", n)

arr = list(map(int, input().split()))
print(arr)

=============================================== =============

Так что это будет читать из входного файла и вывод будет отображаться в выходном файле.

Для более подробной информации смотрите: [https://www.geeksforgeeks.org/inputoutput-external-file-cc-java-python-competitive-programming/][1]

Ответ 7

Можно напрямую сохранить возвращенный результат функции в файле.

    print(output statement, file=open("filename", "a"))