1.用 Python Pandas 转换(最常用)
import pandas as pd
import io
markdown_table = """| 序号 | 评审因素 | 评审标准 | 分值 |
| :--- | :--- | :--- | :--- |
| 1 | 价格分 | 采用低价优先法计算... | 30 |
| 2 | 技术方案 | 方案需包含详细实施计划,优得10分... | 40 |
| 3 | 商务条款 | 满足招标文件要求的得满分... | 30 |"""
# 转换为 DataFrame
df = pd.read_csv(io.StringIO(markdown_table), sep='|', skiprows=[1]).dropna(axis=1, how='all')
# 清理列名空格
df.columns = df.columns.str.strip()
print(df)
输出效果:
序号 评审因素 评审标准 分值
0 1 价格分 采用低价优先法计算... 30
1 2 技术方案 方案需包含详细实施计划... 40
2 3 商务条款 满足招标文件要求的得满分 30
2.转换为 Excel 文件
# 接上面的 df
df.to_excel('评分标准.xlsx', index=False, sheet_name='评分表')
print("Excel 文件已生成:评分标准.xlsx")
3.转换为 HTML(用于网页展示)
html_table = df.to_html(index=False, classes='table table-striped')
print(html_table)
生成的 HTML 可直接用于 Web 页面渲染。
4.转换为可视化表格(用 tabulate 库)
from tabulate import tabulate
# 从 DataFrame 转换
print(tabulate(df, headers='keys', tablefmt='grid', showindex=False))
输出效果:
+--------+------------+--------------------------------+--------+
| 序号 | 评审因素 | 评审标准 | 分值 |
+--------+------------+--------------------------------+--------+
| 1 | 价格分 | 采用低价优先法计算... | 30 |
| 2 | 技术方案 | 方案需包含详细实施计划... | 40 |
| 3 | 商务条款 | 满足招标文件要求的得满分 | 30 |
+--------+------------+--------------------------------+--------+
5.直接在 Markdown 编辑器中渲染
你提供的文本本身就是 Markdown 格式,在以下工具中会自动渲染成表格:
- Typora(实时预览)
- Notion
- Obsidian
- GitHub README
- ChatGPT / Claude 对话界面
只需要确保格式正确(列对齐行 |---| 存在),就会自动显示为表格。
6.一键转换工具
如果不想写代码,可以使用在线工具:
- Markdown Table Editor : https://www.tablesgenerator.com/markdown_tables
- Excel 转 Markdown / Markdown 转 Excel : https://tableconvert.com/
只需粘贴你的 Markdown 文本,即可下载为 Excel/CSV/HTML 格式。
推荐流程:
- LLM 生成 → 输出 Markdown 文本
- Pandas 解析 → 转为 DataFrame(便于计算总分=100校验)
- 后端处理 → 转为 HTML/JSON 返回前端
- 前端展示 → 用表格组件渲染(支持编辑)
这样既利用了 LLM 的生成能力,又保证了数据的结构化和可操作性。
7.将包含 Markdown 表格的字符串解析为 Pandas DataFrame 并显示
import pandas as pd
import io
import re
# 模拟 LLM 输出(可能包含前后文字)
llm_output = """
根据您的需求,生成的评分标准如下:
| 序号 | 评审因素 | 评审标准 | 分值 |
| :--- | :--- | :--- | :--- |
| 1 | 价格分 | 满足招标文件要求且价格最低的为基准价... | 30 |
| 2 | 技术分 | 方案详实得满分 | 70 |
请知悉。
"""
# 1. 使用正则提取表格部分
# 匹配以 | 开头的行,且包含多行(包括表头和分隔线)
table_pattern = r'((?:\|.*?\|\n?)+)'
match = re.findall(table_pattern, llm_output)
if match:
# 取第一个匹配到的表格
table_str = match[0]
# 2. 使用 Pandas 读取
# sep='|' 表示按竖线分隔
# skiprows=[1] 跳过分隔线那一行 (| :--- | :--- |...)
# .dropna(axis=1, how='all') 去掉首尾因分割产生的空列
df = pd.read_csv(io.StringIO(table_str), sep='|', skiprows=[1]).dropna(axis=1, how='all')
# 3. 清理列名(去除前后空格)
df.columns = df.columns.str.strip()
# 4. 显示结果
print("解析成功的表格:")
print(df)
print("\n数据类型:")
print(df.dtypes)
else:
print("未在文本中找到 Markdown 表格")
运行结果
解析成功的表格:
序号 评审因素 评审标准 分值
0 1 价格分 满足招标文件要求且价格最低的为基准价... 30
1 2 技术分 方案详实得满分 70
数据类型:
序号 int64
评审因素 object
评审标准 object
分值 int64
dtype: object
进阶处理:确保数据类型正确
如果分值列中有非数字字符(如"30分"),可以使用以下代码清洗:
# 假设分值列里有"30分"这样的数据
# 使用 .str.extract 提取数字部分
df['分值'] = df['分值'].astype(str).str.extract(r'(\d+)').astype(float)
print("\n清洗后的表格:")
print(df)
代码解析
re.findall: 从杂乱的文本中精准提取表格部分,避免前后文字干扰。pd.read_csv(..., sep='|'): Pandas 天然支持以|为分隔符读取表格。skiprows=[1]: 跳过 Markdown 的分隔行 (| :--- |),这是关键步骤。.dropna(axis=1, how='all'): 去除首尾可能产生的空列(因为开头和结尾的|会导致分割出空值)。.str.strip(): 清理列名中的空格,确保后续引用列名时不出错。
这样你就得到了一个结构化的 Pandas DataFrame,可以进行后续的:
- 存入数据库
- 转为 Excel
- 数据校验(如总分=100)
- 转为 JSON 返回前端