Python - Markdown Table - 仅在 Streamlit 中显示第一行
Python - Markdown Table - Only showing first row in Streamlit
如果需要,我可以尝试生成一个可重现的示例,但我想我会先展示代码。我正在使用 Streamlit 和一个函数,该函数接受一个 JSON 文件并在降价中从中生成一个 table:
table = f"""
|Rank|Title|Value|{"# words|" * n_words}{"Similarity|" * distance}
|--|--|--|--|--|
"""
for i, el in enumerate(data):
line = f"""|{i + 1}|**{el["title"]}**|£{el["value"]:,}|"""
if n_words:
line += f"""{str(el["n_words"])}|"""
if distance:
line += f"""{str(round(el["distance"], 2))}"""
line = f"""{line}
"""
table += line
st.markdown(table)
出于某种原因,它适用于第一行,但不适用于任何其他行。我做错了什么吗?
非常感谢!
你有两个问题。
- 对
markdown
的调用需要减少缩进,以便在 for 循环结束后调用它,而不是在第一个循环结束时调用。
- 您需要从字符串文字中删除缩进。
具体来说,这一行...
line = f"""{line}
"""
... 导致第一行之后的每一行缩进 16 个空格。当然,Markdown 将缩进视为缩进文本是代码块的指示。
简单的解决方法是将该行替换为:
line = f"{line}\n"
如果您真的想要字符串文字,那么您可能要考虑使用 textwrap.dedent 函数。
不过,我会制作 table
一个列表,然后附加每一行。在附加所有行之后,然后是 join
行。事实上,您也可以对所有单元格执行相同的操作。像这样:
table = [
f"|Rank|Title|Value|{"# words|" * n_words}{"Similarity|" * distance}",
"|--|--|--|--|--|"
]
for i, el in enumerate(data):
line = [f"{i + 1}", f'**{el["title"]}**', f'£{el["value"]:,}']
if n_words:
line.append(f'{str(el["n_words"])}')
if distance:
line.append(f'{str(round(el["distance"], 2))}')
table.append(f'|{"|".join(line)}|')
st.markdown("\n".join(table))
如果需要,我可以尝试生成一个可重现的示例,但我想我会先展示代码。我正在使用 Streamlit 和一个函数,该函数接受一个 JSON 文件并在降价中从中生成一个 table:
table = f"""
|Rank|Title|Value|{"# words|" * n_words}{"Similarity|" * distance}
|--|--|--|--|--|
"""
for i, el in enumerate(data):
line = f"""|{i + 1}|**{el["title"]}**|£{el["value"]:,}|"""
if n_words:
line += f"""{str(el["n_words"])}|"""
if distance:
line += f"""{str(round(el["distance"], 2))}"""
line = f"""{line}
"""
table += line
st.markdown(table)
出于某种原因,它适用于第一行,但不适用于任何其他行。我做错了什么吗?
非常感谢!
你有两个问题。
- 对
markdown
的调用需要减少缩进,以便在 for 循环结束后调用它,而不是在第一个循环结束时调用。 - 您需要从字符串文字中删除缩进。
具体来说,这一行...
line = f"""{line}
"""
... 导致第一行之后的每一行缩进 16 个空格。当然,Markdown 将缩进视为缩进文本是代码块的指示。
简单的解决方法是将该行替换为:
line = f"{line}\n"
如果您真的想要字符串文字,那么您可能要考虑使用 textwrap.dedent 函数。
不过,我会制作 table
一个列表,然后附加每一行。在附加所有行之后,然后是 join
行。事实上,您也可以对所有单元格执行相同的操作。像这样:
table = [
f"|Rank|Title|Value|{"# words|" * n_words}{"Similarity|" * distance}",
"|--|--|--|--|--|"
]
for i, el in enumerate(data):
line = [f"{i + 1}", f'**{el["title"]}**', f'£{el["value"]:,}']
if n_words:
line.append(f'{str(el["n_words"])}')
if distance:
line.append(f'{str(round(el["distance"], 2))}')
table.append(f'|{"|".join(line)}|')
st.markdown("\n".join(table))