Функция форматирования с похожей подписью для функции печати - PullRequest
0 голосов
/ 05 марта 2019

У меня есть некоторый код, который печатает материал на консоль, используя некоторые функции print, например,

print('name'.ljust(44), 'age'.rjust(4), 'idea'.rjust(8), sep=',')
for name, age, idea in items:    
    print(name.ljust(44), str(age).rjust(4), idea.rjust(8), sep=',')

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

print('hello ', end='')
print('world!')

Мой вопрос: как мне проще всего записать этот print форматированный вывод в поток, файл или, что еще лучше, просто собрать в один строковый объект? Если я вернусь к обычному форматированию строк, синтаксис будет другим, и мне нужно будет переписать все мое форматирование.

Ответы [ 2 ]

1 голос
/ 05 марта 2019

StringIO позволяет использовать строку, как если бы это был файл. Наряду с использованием print(..., file=...) вы можете сделать:

import io

with io.StringIO() as fp:
    print("hi", "mom", sep=" ", file=fp)
    print('hello ', end='', file=fp)
    print('world!', file=fp)

    str = fp.getvalue()

print(str)

, что дает

hi mom
hello world!

как (я думаю) ты хочешь. Вы также можете использовать fp.readlines(), если вы хотите список строк для каждой строки.

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

import tempfile

with tempfile.TemporaryFile(mode="w+") as fp:
    print("hi", "mom", sep=" ", file=fp)
    print('hello ', end='', file=fp)
    print('world!', file=fp)

    fp.seek(0)
    str = fp.read()

print(str)

Вам необходимо указать mode, поскольку по умолчанию выдает двоичный файл, который не позволяет вам print, и явно перематываете назад в начало перед чтением. (FWIW, более ранняя версия моего ответа содержала flush=True для каждого print, но я не думаю, что это необходимо.)

0 голосов
/ 05 марта 2019

Помогает ли вам рассол?

Что-то вроде

import pickle

text = "Hallo welt          Test."

with open('parrot.pkl', 'wb') as f:
    pickle.dump(text, f)


with open('parrot.pkl', 'rb') as f:
    print(pickle.load(f))
...