Запись нескольких переменных print в файл
У меня есть вывод скрипта в таком виде, все переменные типа str (там ещё надо разбираться с кодировкой, но это другой вопрос). Как мне записать такую конструкцию в файл? Пятый день пытаюсь найти примеры, прочитал различные материалы но так ничего не получилось, максимум могу записать просто одну переменную в файл, пример ниже.
print('Слово:', title_html, '\n') print('Британская транскрипция:', transcription_html, '\n') print('Значения слова:', description_html, '\n') print('Фразовые глаголы:\n', phrase_verbs, '\n') print('Однокоренные слова:\n', my_cognate_words, '\n') print('Словосочетания:\n', phrase_html, '\n') print('Примеры с переводом:\n', phrase_examles, '\n') # ищем тег p с классом text phrase_examles_en = soup.findAll("p", ) for element in phrase_examles_en: print(element.get_text())
Код для записи одной переменной у меня такой
file = open(str(name_url) + ".txt", "w") file.write(title_html) file.close()
Отслеживать
задан 17 фев 2021 в 22:08
45 1 1 серебряный знак 8 8 бронзовых знаков
17 фев 2021 в 22:30
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Соберите в список переменные и запишите его циклом.
l = [title_html, transcription_html, description_html] # и тд with open("file.txt", "w") as f: for i in l: f.write(i)
Отслеживать
ответ дан 18 фев 2021 в 0:00
3,186 2 2 золотых знака 9 9 серебряных знаков 16 16 бронзовых знаков
Запись в файл на Python
В этом посте мы обсудим, как писать в файл на Python.
1. Использование open() функция
Простое решение — открыть файл в режиме записи ( ‘w’ ) с помощью встроенного open() функция, которая открывает его для записи после усечения. Файл создается, если он не существует. Вот как будет выглядеть код:
f = open ( ‘file.txt’ , ‘w’ )
f . write ( ‘Hello, World\n’ )
Приведенный выше синтаксис явно закрывает обработчик файла с close() функция, и вам может потребоваться блокировка try-finally для обработки исключений. Хорошей практикой является использование with ключевое слово, которое автоматически закрывает файл после завершения работы, даже если возникает исключение. Вот эквивалентный код, использующий with утверждение:
Перенаправление 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 мы теперь можем либо печатать на консоль, либо в фай.
Если есть необходимость логировать многопоточное выполнение скриптов, то можно просто немного изменить класс, для вывода не построчно, а блоками для каждого потока. В общем, это уже по необходимости.
Надеюсь материал будет полезен!
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Запись в файл с помощью функции Python print ()
Введение Функция Python print () обычно используется для отображения текста либо в командной строке, либо в интерактивном интерпретаторе, в зависимости от того, как выполняется программа Python. Однако мы можем изменить его поведение, чтобы записывать текст в файл, а не в консоль. В этой статье мы рассмотрим множество способов записи в файл с помощью функции print (). Перенаправление вывода скрипта Python в терминал Быстрый и грязный способ перенаправить вывод скрипта Python прямо из
Время чтения: 5 мин.
Вступление
Функция Python print() обычно используется для отображения текста либо в командной строке, либо в интерактивном интерпретаторе, в зависимости от того, как выполняется программа Python. Однако мы можем изменить его поведение, чтобы записывать текст в файл, а не в консоль.
В этой статье мы рассмотрим множество способов записи в файл с помощью функции print() .
Перенаправление вывода скрипта Python в терминал
Быстрый и грязный способ перенаправить вывод скрипта Python — прямо из командной строки во время выполнения скрипта.
Например, если бы у нас был файл Python с именем hello.py со следующим содержимым:
print("Hallo") # Deliberately in German
Мы можем перенаправить вывод файла в оболочку, используя единственную правую угловую скобку:
$ python3 hello.py > output.txt
Если мы откроем наш только что созданный output.txt , мы увидим следующее содержимое:
Hallo
Однако при использовании этого метода весь вывод скрипта записывается в файл. Часто бывает более гибко выполнить это перенаправление из самого скрипта 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() , наше напечатанное значение без проблем записывается в файл.
Обратите внимание, что перед изменением исходного значения стандартного вывода рекомендуется сохранять в переменной исходное значение. Таким образом мы можем сбросить стандартный вывод до исходного значения после того, как мы закончим, что поможет избежать путаницы.
Сохраним код в новый файл printToFile.py . А затем выполним его:
$ python3 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
Этот пример почти идентичен предыдущему, за исключением того, что вместо перенаправления стандартного потока вывода в файл мы перенаправляем его в стандартный поток ошибок. Если стандартный поток ошибок также был перенаправлен куда-то еще, вывод будет отправлен в это место, а не на экран.
Запустим этот файл:
$ python3 printToStderr.py
Наш вывод покажет:
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 и многому другому.
Licensed under CC BY-NC-SA 4.0