Как записать print в файл python

Обновлено: 06.07.2024

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

Синтаксис

Рассмотрим синтаксис этой функции. Самый простой пример:

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

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

Параметры

Полная версия print выглядит так:

  • *objects — объект/объекты которые необходимо вывести;
  • sep — разделитель между объектами. В качестве своего значения можно передавать строку или None (по умолчанию пробел " ");
  • end — символ в конце строки (по умолчанию перенос строки \n);
  • file — file-like объект [поток] (по умолчанию sys.stdout);
  • flush — принудительный сброс потока [работает с версии Python 3.3] (по умолчанию False).

Пример использования функции print

Самый простой пример:

Следующий пример – вывод строкового значения из переменной:

Выведем разные типы:

Ниже — пример использования параметра sep :

Если функция должна выводить аргументы в виде отдельных строк, можно передать символ экранирования:

Более полезный пример — вывод аргументов в виде пути к файлу:

Как и в случае с sep , end можно использовать для объединения отдельных фрагментов в один большой. При этом вместо объединения аргументов текст из каждого вызова функции будет располагаться в одной строке:

При необходимости можно указывать одновременно два ключевых аргумента:

Еще одни параметры print() — file и flush . В примере ниже реализована запись логов в файл порциями. С помощью параметра file данные выводятся не на экран, а в файл. Flush незамедлительно сбрасывает накопленный буфер в файл каждые 10 итераций.

Кодировка

Функция print() в Python 3 и выше никак не контролирует кодировку символов — это определяется потоком кода. В большинстве случаев нет необходимости менять кодировку, так как по умолчанию используется UTF-8.

В Python 2 кодировка зависит от того, данные какого типа выводятся на экран. При выводе текста кириллицей рекомендуется указывать способ кодировки:

Системную кодировку можно узнать через sys.stdout.encoding :

Буферизация ввода-вывода

Буферизация (от англ. buffer) — способ организации обмена, который подразумевает использование буфера для временного хранения данных.

Блочная буферизация (block-buffered)

Операции ввода и вывода иногда буферизуются с целью повышения производительности. Рассмотрим пример:

Линейная буферизация (line-buffered)

Линейная буферизация потока, перед началом ввода/вывода, ожидает момента, пока в буфере не появиться разрыв строки. Изменив print() в примере выше на следующий:

мы увидим последовательную печать на экран:

Небуферизированный вывод (unbuffered)

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

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

Стилизированный print

pprint

С помощью модуля pprint, который входит в стандартную библиотеку Python, можно более наглядно отображать некоторые объекты, при этом структура их сохраняется.

Один из примеров использования модуля — словарь со вложенными словарями:

вместо длинной строки будет отображен так:

Есть необязательный параметр depth и indent. Depth указывает — ключи какого уровня вложенности отображать, скрытые уровни будут заменены на троеточие. Indent устанавливает размер отступов:

reprlib

Модуль reprlib позволяет использовать функцию repr() , благодаря которой сокращается отображение глубоко вложенных или больших контейнеров, а также множества рекурсивных вызовов:

json.dumps

Словари часто представляют собой данные JSON, широко используемые во всемирной сети. Для правильной стилизации словаря в строку JSON можно воспользоваться одноименным модулем, который имеет хорошие возможности печати:

Цвет (управляющие коды ANSI)

Для выделения важной информации при выводе текста можно воспользоваться возможностью форматировать текст с помощью ANSI кодов. Это может выглядеть как " \033[31m ", где \033 — указание на то, что дальше описывается управляющий код, [31m – задание красного цвета текста.

def out_red(text): print("\033[31m <>".format(text)) def out_yellow(text): print("\033[33m <>".format(text)) def out_blue(text): print("\033[34m <>".format(text)) out_red("Вывод красным цветом") out_yellow("Текст жёлтого цвета") out_blue("Синий текст")

Чтобы такой вариант работал не только на Linux, но и на Windows, необходимо активировать поддержку ANSI для stdout в запущенной консоли, делается это так:

import ctypes kernel32 = ctypes.windll.kernel32 kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)

Анимация (прелоадеры)

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

Вращающееся колесо

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

Progress Bar

Best practice

Как убрать пробелы в print() Многие начинающие Python разработчики забывают о том, что разделителем у функции print() по умолчанию является пробел (" ")

Для удаления пробела, используйте параметр sep :

Python print to file (печать в файл) При необходимости записать какой-то объект в файл можно воспользоваться стандартными возможностями функции print() :

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

2 записать нужное значение в открытый файл:

3 закрыть файл после окончания операции:

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

Таким образом, несмотря на свою кажущуюся простоту, стандартная функция для вывода print() имеет немало скрытых возможностей, некоторые из которых были рассмотрены.

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

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

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

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

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

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

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

Итак. Исходные данные:

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

Класс выглядит так:


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


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

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

в начале моего скрипта. Однако я ничего не получаю .txt-файл. Мой скрипт:

Так в чем проблема? Любой другой способ, кроме этой системы.в stdout?

мне нужно, чтобы мой результат выглядел так:

самый очевидный способ сделать это-напечатать в файловый объект:

однако, перенаправление stdout также работает для меня. Это, вероятно, хорошо для одноразового скрипта, такого как это:

каково первое имя файла в вашем скрипте? Я не вижу инициализации.

мое первое предположение, что glob не находит никаких bamfiles, и поэтому цикл for не запускается. Убедитесь, что папка существует, и распечатайте bamfiles в скрипт.

в большинстве случаев вам лучше просто писать в файл нормально.

или, если у вас есть несколько элементов, которые вы хотите написать с пробелами между ними, например print :

Python 2 или Python 3 ссылка на API:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

на аргумент должен быть объектом с write(string) метод; если его нет или None , sys.stdout будет использоваться. Поскольку печатные аргументы преобразуются в текстовые строки print() не может использоваться с объектами файлов двоичного режима. Для этого используйте file.write(. ) вместо.

С объект file как правило, содержит write() метод, все, что вам нужно сделать, это передать объект file в свой аргумент.

Это прекрасно работает:

Теперь "Привет" будет написано тест.txt-файл. Обязательно закройте stdout С close , без него содержимое не будет сохранено в файле

запустить файл, используйте

где вместо <filename> С именем файла, в который вы хотите ввести вывод. The > токен говорит (большинство) оболочки для установки stdout в файл, описанный следующим маркером.

одна важная вещь, которая должна быть упомянута здесь, это то, что "script.py" необходимо сделать исполняемый файл для ./script.py запустить.

поэтому перед запуском ./script.py выполнить следующую команду

chmod a+x script.py (сделайте скрипт исполняемым для всех пользователей)

не используйте print используйте logging

простой пример

импорт logging , получаем logger , и установите уровень обработки:

если вы хотите напечатать в stdout:

если вы хотите также записать в файл (если вы хотите только записать в файл, пропустите последний раздел):

тогда, где бы вы ни использовали print использовать logger методы:

чтобы узнать больше об использовании более продвинутых logging особенности, читать отличные logging учебник в Python docs.

вам может не понравиться этот ответ, но я думаю, что это правильный. Не меняйте место назначения stdout, если это не абсолютно необходимо (возможно, вы используете библиотеку, которая выводит только stdout. здесь явно не так).

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

а затем, когда вы все закончите собирать свои "строки данных" по одной строке на элемент списка, вы можете присоединиться к ним с некоторыми '\n' символы, чтобы сделать все это outputtable; может даже обернуть ваше заявление выход в with блок, для дополнительной безопасности (автоматически закроет ваш выход справится даже если что-то пойдет не так):

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

Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.

Файлы Python

Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).

В Python существует два типа файлов:

Текстовые файлы

Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.

Текст может храниться в двух форматах: ( .txt ) — простой текст и ( .rtf ) — «формат обогащенного текста».

Бинарные файлы

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

Они хранятся в формате .bin .

Любую операцию с файлом можно разбить на три крупных этапа:

  1. Открытие файла
  2. Выполнение операции (запись, чтение)
  3. Закрытие файла

Открытие файла

Метод open()

В Python есть встроенная функция open() . С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.

  • file_name = имя открываемого файла
  • access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения ( r ), если другое не указано. Далее полный список режимов открытия файла

Пример

Создадим текстовый файл example.txt и сохраним его в рабочей директории.

Текстовый файл пример

Следующий код используется для его открытия.

В этом примере f — переменная-указатель на файл example.txt .

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

Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252 , а в Linux — utf-08 .

Закрытие файла

Метод close()

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

Существуют следующие способы:

Способ №1

Проще всего после открытия файла закрыть его, используя метод close() .

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

Способ №2

Также можно написать try/finally , которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.

Без него программа завершается некорректно.

Вот как сделать это исключение:

Файл нужно открыть до инструкции try , потому что если инструкция open сама по себе вызовет ошибку, то файл не будет открываться для последующего закрытия.

Этот метод гарантирует, что если операции над файлом вызовут исключения, то он закроется до того как программа остановится.

Способ №3

Инструкция with

Еще один подход — использовать инструкцию with , которая упрощает обработку исключений с помощью инкапсуляции начальных операций, а также задач по закрытию и очистке.

В таком случае инструкция close не нужна, потому что with автоматически закроет файл.

Вот как это реализовать в коде.

Чтение и запись файлов в Python

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

Функция read()

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

Синтаксис

  • file = объект файла
  • size = количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.

Пример

Функция readline()

Функция readline() используется для построчного чтения содержимого файла. Она используется для крупных файлов. С ее помощью можно получать доступ к любой строке в любой момент.

Пример

Создадим файл test.txt с нескольким строками:

Посмотрим, как функция readline() работает в test.txt .

Обратите внимание, как в последнем случае строки отделены друг от друга.

Функция write()

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

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

Синтаксис

Пример

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

Переименование файлов в Python

Функция rename()

Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.

  • src = файл, который нужно переименовать
  • dest = новое имя файла

Пример

Текущая позиция в файлах Python

В Python возможно узнать текущую позицию в файле с помощью функции tell() . Таким же образом можно изменить текущую позицию командой seek() .

Читайте также: