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())