Направление вывода на печать в.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"))