我有一些代码可以使用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
格式的输出写入流,文件,或者甚至最好将其收集到单个字符串对象中?如果我恢复为常规字符串格式,则语法会有所不同,我将需要重新编写所有格式。
答案 0 :(得分:1)
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
,但我认为这不是必需的。)
答案 1 :(得分:0)
泡菜会帮你吗?
类似
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))