python 在循环中格式化以编程方式生成的jupyter markdown列表和表[重复]

0dxa2lsx  于 2023-04-10  发布在  Python
关注(0)|答案(1)|浏览(96)

此问题已在此处有答案

What is causing "triple quotes" to change the indentation?(5个答案)
昨天关门了。
这篇帖子昨天编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
我想使用Jupyter以编程方式生成一个报告,需要将变量放入markdown表中。我找到了这个相关的答案:Related Answer
但是,如果你将代码放在for循环中,表和列表的格式不会像你想要的那样(在Google Colab,Pycharm和Jupyter Notebook中测试过)。

from IPython.display import display_markdown

for i in range(2):
    display_markdown(f'''## heading
    - ordered
    - list

    The table below:

    | id |value|
    |----|-----|
    | a  | {i} |
    | b  |  2  |
    ''', raw=True)

在Jupyter Notebook、Pycharm和Google Colab中测试代码。如果在for循环之外使用,代码将提供正确格式的文本。

编辑这个问题Link描述了潜在的问题。但是,我相信不同的上下文(markdown格式)和对未来的搜索有帮助。

xjreopfe

xjreopfe1#

正如mkrieger的评论所说,问题在于你在行首添加的额外间距:
这个版本非常接近你的,但工作:

from IPython.display import display_markdown

for i in range(2):
    display_markdown(f'''## heading
- ordered
- list

The table below:

| id |value|
|----|-----|
| a  | {i} |
| b  |  2  |
''', raw=True)

我只是删除了第一行之后行首的多余空格。
下面是一个使用字符串替换循环的代码版本,以完成相同的事情:

s='''## heading
- ordered
- list

The table below:

| id |value|
|----|-----|
| a  | PLACEHOLDER_FOR_VALUE |
| b  |  2  |'''

# code based on https://discourse.jupyter.org/t/jupyterlab-dictionary-content-output-format/5863/2?u=fomightez
from IPython.display import Markdown, display
def printmd(string):
    display(Markdown(string))
for i in range(2):
    printmd(s.replace("PLACEHOLDER_FOR_VALUE",f"{i}"))

我使用的是从我熟悉的字符串生成markdown的变体,参见here
顺便说一句,如果你想用Jupyter组装报告,nbformat是你可能想研究的东西。
here顶部的介绍可能会帮助您了解nbformat如何帮助您。重要的是,notebook和单元格的抽象以及单元格的类型都已内置,您可以轻松地输出新的notebook,其中包含您以编程方式设计的内容。
更多示例代码请参见herehere

相关问题