Python print вывод в файл

Содержание
  1. Python print() to File
  2. Rukovodstvo
  3. статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
  4. Запись в файл с помощью функции Python print ()
  5. Введение Функция Python print () обычно используется для отображения текста либо в командной строке, либо в интерактивном интерпретаторе, в зависимости от того, как выполняется программа Python. Однако мы можем изменить его поведение, чтобы записывать текст в файл, а не в консоль. В этой статье мы рассмотрим множество способов записи в файл с помощью функции print (). Перенаправление вывода скрипта Python в терминал Быстрый и грязный способ перенаправить вывод скрипта Python прямо из
  6. Вступление
  7. Перенаправление вывода скрипта Python в терминал
  8. Перенаправление стандартного выходного потока
  9. Перенаправление стандартного потока ошибок
  10. Печать с использованием параметра «файл»
  11. Заключение
  12. об авторе
  13. Перенаправление print() в файл с помощью Python

Python print() to File

Learn to use Python print() function to redirect the print output of a Python program or Python script to a file.

1. Print to File using file Argument

The print() function accepts 5 keyword arguments apart of the objects to print on the standard output (by default, the screen). One such keyword argument is file.

The default value of the file argument is sys.stdout which prints the output on the screen. We can specify any other output target which must be an object with write(string) method.

The given Python program opens the demo.txt in writing mode and write the test ‘Hello, Python !’ into the file.

sourceFile = open('demo.txt', 'w') print('Hello, Python!', file = sourceFile) sourceFile.close()

2. Redirecting Standard Output Stream to a File

Specifying the file parameter in all print() statements may not be desirable in some situations. We can temporarily redirect all the standard output streams to a file in this case.

Once all the required objects are written in the File, we can redirect the standard output back to the stdout .

import sys # Saving the reference of the standard output original_stdout = sys.stdout with open('demo.txt', 'w') as f: sys.stdout = f print('Hello, Python!') print('This message will be written to a file.') # Reset the standard output sys.stdout = original_stdout print('This message will be written to the screen.')

The program outputs to the file after setting the standard output to the file.

Hello, Python! This message will be written to a file.

The program again outputs to the console after resetting the standard putout target.

This message will be written to the screen.

3. Redirecting Script Output to File

Another way to redirect the output is directly from the command line while executing the Python script. We can use > character to output redirection.

The script output is in the file.

Источник

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Запись в файл с помощью функции Python print ()

Введение Функция Python print () обычно используется для отображения текста либо в командной строке, либо в интерактивном интерпретаторе, в зависимости от того, как выполняется программа Python. Однако мы можем изменить его поведение, чтобы записывать текст в файл, а не в консоль. В этой статье мы рассмотрим множество способов записи в файл с помощью функции print (). Перенаправление вывода скрипта Python в терминал Быстрый и грязный способ перенаправить вывод скрипта Python прямо из

Вступление

Функция Python print() обычно используется для отображения текста либо в командной строке, либо в интерактивном интерпретаторе, в зависимости от того, как выполняется программа Python. Однако мы можем изменить его поведение, чтобы записывать текст в файл, а не в консоль.

Читайте также:  Изображение карта html это

В этой статье мы рассмотрим множество способов записи в файл с помощью функции print() .

Перенаправление вывода скрипта Python в терминал

Быстрый и грязный способ перенаправить вывод скрипта Python — прямо из командной строки во время выполнения скрипта.

Например, если бы у нас был файл Python с именем hello.py со следующим содержимым:

 print("Hallo") # Deliberately in German 

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

 $ python3 hello.py > output.txt 

Если мы откроем наш только что созданный output.txt , мы увидим следующее содержимое:

Однако при использовании этого метода весь вывод скрипта записывается в файл. Часто бывает более гибко выполнить это перенаправление из самого скрипта Python.

Перенаправление стандартного выходного потока

В Python print() более гибкая, чем вы думаете. Он не был жестко запрограммирован таким образом, чтобы указанный текст можно было только записать на дисплей. Вместо этого он отправляет текст в место, называемое стандартным потоком вывода , также известным как stdout .

Все системы UNIX имеют три основных канала — стандартный канал ввода ( stdin ), стандартный канал вывода ( stdout ) и стандартный канал ошибок ( stderr ).

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

Если стандартный вывод перенаправляется в конкретный файл, текст, указанный в функции print() будет записан в этот файл, а не отображаться на экране.

В Python ссылку на стандартный вывод можно получить с помощью объекта stdout модуля sys Это файловый объект , то есть у него есть методы, которые позволяют Python читать и писать из него, как из реального файла.

Давайте посмотрим на пример, в котором мы меняем stdout на файл:

 import sys print('This message will be displayed on the screen.') original_stdout = sys.stdout # Save a reference to the original standard output with open('filename.txt', 'w') as f: sys.stdout = f # Change the standard output to the file we created. print('This message will be written to a file.') sys.stdout = original_stdout # Reset the standard output to its original value 

Функция print() принимает предоставленный строковый аргумент, добавляет в конец символ новой строки и вызывает метод stdout.write() для записи его в стандартный вывод.

В приведенном выше примере мы сначала печатаем строку текста, как мы привыкли, которая будет отображаться в консоли при запуске файла. Затем мы переназначили stdout нашему пользовательскому файловому объекту — f . Поскольку файловый объект имеет совершенно допустимый write() , наше напечатанное значение без проблем записывается в файл.

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

Читайте также:  What is contains method in java

Сохраним код в новый файл printToFile.py . А затем выполним его:

В Терминале мы увидим следующий вывод:

 This message will be displayed on the screen. 

И сценарий создаст новый файл с именем filename.txt со следующим содержимым:

 This message will be written to a file. 

Вы успешно перенаправили данные из стандартного потока вывода в файл. Давайте посмотрим, как мы можем сделать это с другим популярным файловым объектом, предназначенным для ошибок программирования.

Перенаправление стандартного потока ошибок

В Python ошибки записываются в стандартный поток ошибок , также известный как stderr . По умолчанию это также интерактивное окно, но его можно изменить с помощью объекта sys.stderr Если бы мы хотели вывести значения на stderr , мы могли бы просто перенаправить sys.stdout чтобы он указывал на sys.stderr .

Создайте файл с именем printToStderr.py и добавьте следующий код:

 import sys print('This message will be displayed via standard output.') original_stdout = sys.stdout # Save a reference to the original standard output sys.stdout = sys.stderr # Redirect the standard output to the standard error. print('This message will be displayed via the standard error.') sys.stdout = original_stdout # Reset the standard output to its original value 

Этот пример почти идентичен предыдущему, за исключением того, что вместо перенаправления стандартного потока вывода в файл мы перенаправляем его в стандартный поток ошибок. Если стандартный поток ошибок также был перенаправлен куда-то еще, вывод будет отправлен в это место, а не на экран.

 This message will be displayed via standard output. This message will be displayed via the standard error. 

Хотя нам это может показаться обычным выводом, для компьютера он отображается через разные конвейеры.

Печать с использованием параметра «файл»

В предыдущих примерах мы явно перенаправили стандартный вывод на другой файловый объект, изменив объект stdout Однако для удобства мы можем сделать это прямо из функции print() , указав расположение вывода с помощью параметра file

Например, если бы мы хотели печатать прямо в файл, не изменяя стандартный stdout всего скрипта, мы бы написали:

 import sys print('This message will be displayed on the screen.') with open('filename.txt', 'w') as f: print('This message will be written to a file.', file=f) 

Поскольку мы не возились с явным перенаправлением стандартного вывода, нам больше не нужно сбрасывать его до исходного значения. В результате это предпочтительный способ записи в файл с помощью функции print() .

Примечание. Хотя имя параметра — file , помните, что он работает с любыми файловыми объектами. Например, если вы хотите печатать в stderr , вы должны изменить print() на:

 print('This message will be written to stderr.', file=sys.stderr) 

Заключение

В этой статье мы обсудили перенаправление print() Python с использованием различных методов. Эти методы включали перенаправление вывода сценария Python из командной строки, перенаправление стандартного вывода в сценариях Python и указание файлового объекта в file непосредственно в функции print() .

об авторе

Эта статья была написана Якобом Стопаком, разработчиком программного обеспечения и консультантом, который страстно помогает другим улучшить свою жизнь с помощью кода. Джейкоб является автором Руководства по основам кодирования для разработчиков , вводной книги, в которой рассматриваются основные концепции и инструменты кодирования. Он содержит главы по базовой компьютерной архитектуре, Интернету, командной строке, HTML, CSS, JavaScript, Python, Java, базам данных / SQL, Git и многому другому.

Читайте также:  Бронирование по календарю php

Licensed under CC BY-NC-SA 4.0

Источник

Перенаправление print() в файл с помощью Python

С Python работаю совсем недавно. Многого не знаю. Заранее приношу свои извинения.

При разработке программ, для отслеживания логики выполнения и информировании при возникновении исключений, использую функцию print(), которая выводит данные на консоль. На мой взгляд это очень удобно: быстро вставил print(‘нужная_информация’). Но для использования модуля уже в работе принты, выводящие информацию на консоль совершенно лишние. Хотя конечно, некоторую информацию все таки хотелось бы логировать, писать в файл.

«Погуглил». На сегодняшний день в интернете на эту тему предлагаются решения, которые подразумевают вносить большие изменения в код программы, либо работающие не совсем так, как того хотелось бы.

Первое. Перенаправление stdout в файл — хорошо, но вывод в файл осуществляется только после закрытия файла. Недостатки: одновременно выводится большое количество информации, которая может быть утеряна при сбое; построчное сохранение в файл требует открытия и закрытия файла при каждом принте, а в код такие дополнения вносить не хотелось бы.

Второе. Предлагается использование специальных логгеров. Они конечно же удобные, умеют различать ошибки и варнинги, но так же требуют кардинальной переработки кода под себя.

Перерабатывать ни чего не хочется. Не хочется дописывать в принты дополнительные параметры для записи в файл, а хочется просто оставить так как есть, но что бы вывод осуществлялся не на консоль а в файл.

Решение нашел. Собственно суть написания статьи в том, что бы им поделиться, вдруг действительно кому то будет полезно.

  • много кода;
  • много принтов в коде;
  • хочется их выводить не на консоль, а логировать в файл;
  • но иногда нужно снова все видеть на консоли а не в файле;
  • желательно, что бы это делалось построчно, а не крупными блоками;
  • вносить много изменений в код совершенно не хочется.
class mylogger(object): def __init__(self, fn='', tofile=False): self.fn = fn self.tofile = tofile return def printml(self, *args): toprint = '' for v in args: toprint = toprint + str(v) + ' ' if self.tofile: f = open(self.fn, 'a') f.write(toprint + "\n") f.close() else: print(toprint) return 

Теперь, для того, что бы все принты в скрипте выводили данные в файл в соответствии с описанными выше требованиями нужно добавить пару строк в начале модуля:

# создаем экземпляр объекта # указываем имя лога и # PRINT_TO_FILE = True - вывод в файл, # иначе - на консоль log = mylogger(LOGFILE, PRINT_TO_FILE) # переопределяем адрес функции print() # на адрес метода нашего логгера print = log.printml 

Все! В коде больше ни чего переделывать не нужно. Изменив параметр PRINT_TO_FILE мы теперь можем либо печатать на консоль, либо в фай.

Если есть необходимость логировать многопоточное выполнение скриптов, то можно просто немного изменить класс, для вывода не построчно, а блоками для каждого потока. В общем, это уже по необходимости.

Надеюсь материал будет полезен!

Источник

Оцените статью