Записать в переменную значение из строки вывода python
Допустим у меня есть список
a = ['d', 3, 'w', 24]
Если я хочу вывести этот список на экран (в строку вывода), я пишу print(a) (логично)
Возможно ли мне записать в переменную _a тот текст, который выводится на экран, когда я пишу print(a)?
Ответы (4 шт):
Просто сделайте преобразование в строку
a = ['d', 3, 'w', 24]
s = str(a)
print(a)
print(s)
import io
output = io.StringIO() # создание «файла» в памяти
print(a, file=output)
a_ = output.getvalue() # получение содержания файла после вызова print()
output.close()
(В переменной а_ будет строка "['d', 3, 'w', 24]\n")
Обьяснение:
В вызове функции print() я добавил параметр file=output, чтобы вывод был не на экран, а в файл. Затем в переменную а_ я присвоил содержание этого файла.
Но не нужно было применить реальный файл, а только симуляцию файла в памяти с использованием модуля io.
Примечание:
То самое с применением контекстного менеджера (спасибо CrazyElf за полезный комментарий):
import io
with io.StringIO() as output:
print(a, file=output)
a_ = output.getvalue()
a_ = str(a) # в переменной а_ будет строка "['d', 3, 'w', 24]"
Этот подход к решению вашей проблемы возможно благодаря тому, что вызов функции print(arg) на самом деле сначала применит на аргумент arg функцию str(), и только после этого выведет на экран результат этого применения с переходом на новую строку.
Немного передалал код от @MarianD, чтобы убрать лишнее
import io
a = ['d', 3, 'w', 24]
with io.StringIO() as buffer:
print(*a, file=buffer)
a_ = buffer.getvalue().strip()
print(a_)
Вывод
d 3 w 24
Здесь остаются только значения без "лишних" символов, что может не соответствовать пожеланиям, но как вариант оставлю