Python,控制台并导出到文件
Python, the Console and exporting to a file
我有一个将文本打印到控制台的功能。下面是代码的一个版本(它实际上是一个故事的很多行,所以我正在总结它。)我的问题是 - 我是否可以编写另一个函数来获取 all_text() 和用它生成一个docx文件?我已经成功创建了一个 .txt 文件,但我更希望创建带有格式选项的文件。
from docx import Document
document = Document()
def all_text():
print("Line1\nLine2\nLine3")
document.add_paragraph(all_text())
document.save("demo.docx")
Document.add_paragraph()
需要一个字符串。您的 all_text()
函数不返回字符串,而是写入 sys.stdout
(默认情况下重定向到您的控制台)并(隐含地)返回 None
.
干净的解决方案当然是更改您的 all_text()
函数,以便它 returns 一个字符串而不是写入 sys.stdout
ie
def all_text():
return "Line1\nLine2\nLine3"
如果你的真实函数实际上在不同的地方做了很多打印 and/or 调用自己打印到 stdout 等的函数,使得 "clean solution" 不切实际或太昂贵,你也可以绕过将 sys.stdout
重定向到 StringIO
并将收集到的值发送到 add_paragraph
,即:
import sys
try:
from io import StringIO # py3
except ImportError:
from cStringIO import StringIO
def all_text():
print("Line1\nLine2\nLine3")
def get_all_text():
sys.stdout = buffer = StringIO
try:
all_text()
return buffer.getvalue()
finally:
sys.stdout = sys.__stdout__
document.add_paragraph(get_all_text())
我有一个将文本打印到控制台的功能。下面是代码的一个版本(它实际上是一个故事的很多行,所以我正在总结它。)我的问题是 - 我是否可以编写另一个函数来获取 all_text() 和用它生成一个docx文件?我已经成功创建了一个 .txt 文件,但我更希望创建带有格式选项的文件。
from docx import Document
document = Document()
def all_text():
print("Line1\nLine2\nLine3")
document.add_paragraph(all_text())
document.save("demo.docx")
Document.add_paragraph()
需要一个字符串。您的 all_text()
函数不返回字符串,而是写入 sys.stdout
(默认情况下重定向到您的控制台)并(隐含地)返回 None
.
干净的解决方案当然是更改您的 all_text()
函数,以便它 returns 一个字符串而不是写入 sys.stdout
ie
def all_text():
return "Line1\nLine2\nLine3"
如果你的真实函数实际上在不同的地方做了很多打印 and/or 调用自己打印到 stdout 等的函数,使得 "clean solution" 不切实际或太昂贵,你也可以绕过将 sys.stdout
重定向到 StringIO
并将收集到的值发送到 add_paragraph
,即:
import sys
try:
from io import StringIO # py3
except ImportError:
from cStringIO import StringIO
def all_text():
print("Line1\nLine2\nLine3")
def get_all_text():
sys.stdout = buffer = StringIO
try:
all_text()
return buffer.getvalue()
finally:
sys.stdout = sys.__stdout__
document.add_paragraph(get_all_text())