Python print to file windows

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Python – Print to File

In this article, we shall look at some of the ways to use Python to print to file.

Method 1: Print To File Using Write()

We can directly write to the file using the built-in function write() that we learned in our file handling tutorial.

Output (Assume that output.txt is a newly created file)

Method 2: Redirect sys.stdout to the file

Usually, when we use the print function, the output gets displayed to the console.

But, since the standard output stream is also a handler to a file object, we can route the standard output sys.stdout to point to the destination file instead.

The below code is taken from our previous article on stdin, stdout and stderr. This redirects the print() to the file.

Output (Assume that output.txt is a newly created file)

Method 3: Explicitly print to the file

We can directly specify the file to be printed in the call to print() , by mentioning the file keyword argument.

For example, the below snippet prints to the file output.txt .

The file now has the three lines appended to it, and we have successfully printed to output.txt !

Using a context manager

However, this method isn’t the best way to resolve this situation, due to the repeated calls to open() on the same file. This wastes time, and we can do better!

Читайте также:  Macbook загрузка с флешки linux

The better way would be to explicitly use a context manager with statement, which takes care of automatically closing the file and using the file object directly.

This gives the same result as before, appending the three lines to output.txt , but is now much faster, since we don’t open the same file again and again.

Method 4: Use the logging module

We can use Python’s logging module to print to the file. This is preferred over Method 2, where explicitly changing the file streams is not be the most optimal solution.

Python print to file

Python Tutorial

Table of Contents

1. Python Print to File

In this lesson, we will see how we can route our python print statements in to a file. This means that whatever we try to print will be saved to a file. This can come handy when:

  • You don’t want to convert your project to use logger temporarily
  • Keep the print statements handy and portable

Let’s get started.

2. Printing to file

When we need to print our output to files, this can be achieved in two ways which are both simple to use. Let’s look at them one by one.

2.1) Setting the route as global

To start, we can set the output route Python needs to consider as a global variable for our program. This means that you need to make a simple assignment and then call print just like we do any other time.

Let’s put above logic in a simple code snippet:

When we run the above program, we see that a new file is created in the same directory with name ‘output.txt’ with following contents:

Let’s try another way of doing this.

2.2) Deciding with each print call

There can be times when you do not want to set the print to file for the entire program but just for a few calls in the program. This can be achieved as well. Let’s try to achieve this in a simple code snippet:

When we run this program, the same output is achieved. The advantage of this method is that we can decide, with each print call if we want to print the output to a file or not.

3. Conclusion

In this quick post, we saw how we can print our statements to a file using Python 3. Although printing to file is cool but we should instead consider logging in Python when we need this kind of behavior with a lot of other customizations.

That’s all for routing python print() to file.

How to redirect ‘print’ output to a file?

I want to redirect the print to a .txt file using python. I have a for loop, which will print the output for each of my .bam file while I want to redirect all these output to one file. So I tried to put:

at the beginning of my script. However I get nothing in the .txt file. My script is:

So what’s the problem? Any other way besides this sys.stdout ?

I need my result look like:

12 Answers 12

The most obvious way to do this would be to print to a file object:

However, redirecting stdout also works for me. It is probably fine for a one-off script such as this:

Since Python 3.4 there’s a simple context manager available to do this in the standard library:

Redirecting externally from the shell itself is another option, and often preferable:

What is the first filename in your script? I don’t see it initialized.

My first guess is that glob doesn’t find any bamfiles, and therefore the for loop doesn’t run. Check that the folder exists, and print out bamfiles in your script.

Also, use os.path.join and os.path.basename to manipulate paths and filenames.

You can redirect print with the >> operator.

In most cases, you’re better off just writing to the file normally.

or, if you have several items you want to write with spaces between, like print :

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

The file argument must be an object with a write(string) method; if it is not present or None , sys.stdout will be used. Since printed arguments are converted to text strings, print() cannot be used with binary mode file objects. For these, use file.write(. ) instead.

Since file object normally contains write() method, all you need to do is to pass a file object into its argument.

Write/Overwrite to File

Write/Append to File

This works perfectly:

Now the hello will be written to the test.txt file. Make sure to close the stdout with a close , without it the content will not be save in the file

Don’t use print , use logging

You can change sys.stdout to point to a file, but this is a pretty clunky and inflexible way to handle this problem. Instead of using print , use the logging module.

Читайте также:  Браузеры для windows атом

With logging , you can print just like you would to stdout , or you can also write the output to a file. You can even use the different message levels ( critical , error , warning , info , debug ) to, for example, only print major issues to the console, but still log minor code actions to a file.

A simple example

Import logging , get the logger , and set the processing level:

If you want to print to stdout:

If you want to also write to a file (if you only want to write to a file skip the last section):

Then, wherever you would use print use one of the logger methods:

To learn more about using more advanced logging features, read the excellent logging tutorial in the Python docs.

The easiest solution isn’t through python; its through the shell. From the first line of your file ( #!/usr/bin/python ) I’m guessing you’re on a UNIX system. Just use print statements like you normally would, and don’t open the file at all in your script. When you go to run the file, instead of

to run the file, use

where you replace with the name of the file you want the output to go in to. The > token tells (most) shells to set stdout to the file described by the following token.

One important thing that needs to be mentioned here is that «script.py» needs to be made executable for ./script.py to run.

So before running ./script.py ,execute this command

chmod a+x script.py (make the script executable for all users)

If you are using Linux I suggest you to use the tee command. The implementation goes like this:

If you don’t want to change anything in the code, I think this might be the best possible solution. You can also implement logger but you need do some changes in the code.

You may not like this answer, but I think it’s the RIGHT one. Don’t change your stdout destination unless it’s absolutely necessary (maybe you’re using a library that only outputs to stdout. clearly not the case here).

I think as a good habit you should prepare your data ahead of time as a string, then open your file and write the whole thing at once. This is because input/output operations are the longer you have a file handle open, the more likely an error is to occur with this file (file lock error, i/o error, etc). Just doing it all in one operation leaves no question for when it might have gone wrong.

Here’s an example:

And then when you’re all done collecting your «data lines» one line per list item, you can join them with some ‘\n’ characters to make the whole thing outputtable; maybe even wrap your output statement in a with block, for additional safety (will automatically close your output handle even if something goes wrong):

However if you have lots of data to write, you could write it one piece at a time. I don’t think it’s relevant to your application but here’s the alternative:

Обработка файлов в Python

Автор: Guest Contributor
Дата записи

Вступление

Существует неписаное мнение, что Python-один из лучших языков программирования для начинающих. Он чрезвычайно универсален, легко читается/анализируется и довольно приятен для глаз. Язык программирования Python обладает высокой масштабируемостью и широко рассматривается как один из лучших наборов инструментов для создания инструментов и утилит, которые вы можете использовать по разным причинам.

В этой статье мы кратко рассмотрим, как Python обрабатывает один из самых важных компонентов любой операционной системы: ее файлы и каталоги. К счастью, Python имеет встроенные функции для создания и управления файлами, либо плоскими файлами , либо текстовыми файлами . Модуль io является модулем по умолчанию для доступа к файлам, поэтому нам не нужно будет импортировать какую-либо внешнюю библиотеку для общих операций ввода-вывода.

Ключевыми функциями, используемыми для обработки файлов в Python, являются: open () , close () , read () , write() и append() .

Открытие файлов с помощью open()

Эта функция возвращает файловый объект под названием “handle”, который используется для чтения и записи в файл. Аргументы, которые может получить функция, следующие:

Обычно требуются только параметры filename и mode , в то время как остальные используются неявно, заданные со значениями по умолчанию.

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

Это откроет текстовый файл под названием “Тестовый текст” в режиме только для чтения. Обратите внимание, что был указан только параметр filename, это связано с тем, что режим “чтение” является режимом по умолчанию для функции open.

Режимы доступа, доступные для функции open () , следующие:

  • r : Открывает файл в режиме только для чтения. Начинается чтение с начала файла и является режимом по умолчанию для функции open () .
  • rb : Открывает файл только для чтения в двоичном формате и начинает чтение с начала файла. Хотя двоичный формат может использоваться для различных целей, он обычно используется при работе с такими вещами, как изображения, видео и т. Д. r+ : Открывает файл для чтения и записи, помещая указатель в начало файла.
  • w : Открывается в режиме только записи. Указатель помещается в начало файла, и это перезапишет любой существующий файл с тем же именем. Он создаст новый файл, если файл с таким же именем не существует.
  • wb : Открывает файл только для записи в двоичном режиме.
  • w+ : Открывает файл для записи и чтения.
  • wb+ : Открывает файл для записи и чтения в двоичном режиме.
  • a : Открывает файл для добавления в него новой информации. Указатель помещается в конец файла. Новый файл создается, если файл с таким же именем не существует.
  • ab : Открывает файл для добавления в двоичном режиме.
  • a+ : Открывает файл как для добавления, так и для чтения.
  • ab+ : Открывает файл как для добавления, так и для чтения в двоичном режиме.
Читайте также:  Перестала работать кнопка print screen windows 10

Если и выполняемый файл Python, и целевой файл для чтения не существуют в одном каталоге, нам нужно передать полный путь к файлу для чтения в функцию open () , как показано в следующем фрагменте кода:

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

Чтобы избежать этой проблемы, рекомендуется перехватывать ошибки с помощью блока try-finally для обработки исключения, как показано ниже.

Чтение из файлов с помощью read()

Python содержит 3 функции для чтения файлов: read() , readline () и readlines() . Последние две функции являются просто вспомогательными функциями, которые облегчают чтение определенных типов файлов.

Для примеров, которые будут использованы, “TestingText.txt” содержит следующий текст:

Метод чтения используется следующим образом:

Результат будет следующим:

Примечание : Специальные символы могут быть неправильно прочитаны с помощью функции read . Чтобы правильно читать специальные символы, вы можете передать параметр кодировки в функцию read() и установить его значение в utf 8 , как показано ниже:

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

Результат будет следующим:

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

В приведенном выше сценарии первый оператор print() возвращает первую строку и вставляет пустую строку в консоль вывода. Следующий оператор print() отделяется от предыдущей строки пустой строкой и начинается с новой строки, как показано в выводе:

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

Выход из этого кода будет следующим:

Имейте в виду, что функция readlines() считается намного медленнее и неэффективнее , чем функция read () , без особых преимуществ. Одной из хороших альтернатив этому является использование цикла, который будет работать намного плавнее и быстрее:

Обратите внимание, что если строка не будет напечатана, она будет заменена в буфере следующим оператором

Запись в файлы с помощью write()

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

Если необходимо написать несколько строк, то вместо этого можно использовать подфункцию writelines() :

Примечание : чтобы иметь возможность использовать функцию print () , режим должен быть установлен как w+ , что позволяет как читать, так и писать.

Добавление в файлы с помощью append()

Эта функция действует аналогично функции write () , однако вместо перезаписи файла функция append() добавляет содержимое к существующему файлу.

Если текстовый файл с именем “Testing Text Three” содержит следующую информацию:

Для добавления нового текста можно использовать следующий код:

Результат будет следующим:

Закрытие открытых файлов с помощью close()

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

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

Вывод

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

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

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