You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Discord消息中的Python PrettyTable格式与本地一致?

解决Discord机器人PrettyTable格式错乱问题

问题根源在于Discord的消息渲染逻辑:Visual Studio控制台用等宽字体,能完美对齐ASCII表格,但Discord默认消息用比例字体,普通文本表格会因字符宽度不一致导致排版混乱。按以下方式修改即可解决:

1. 用代码块包裹表格内容

Discord中用三个反引号(```)包裹表格文本,会强制启用等宽字体渲染,ASCII表格的对齐效果就能和控制台一致。

2. 修正代码中的错误并优化输出

你的代码里有个Python语法错误:ToString()是C#的写法,Python里应该用str()或get_string()方法。另外可以让PrettyTable直接生成适配的格式,两种方案可选:

方案一:输出ASCII表格+代码块包裹

from prettytable import PrettyTable
import json

def get_list(dct):
    table = PrettyTable()
    # 统一设置左对齐,确保列对齐更稳定
    table.align = "l"
    # 添加列名
    for column in dct[0].keys():
        table.add_column(column, [])
    # 添加行数据(简化写法)
    for item in dct:
        table.add_row(list(item.values()))
    # 返回ASCII格式的表格字符串
    return str(table)

async def on_message(message):
    if message.content.startswith('$LIST ToPlay'):
        with open('GameListData.json', 'r+') as file:
            data = json.load(file)
            msg = get_list(data['ToPlay'])
            # 用代码块包裹后发送
            await message.channel.send(f"```\n{msg}\n```")

方案二:输出Markdown格式表格

直接让PrettyTable生成Discord支持的Markdown表格,无需代码块也能渲染出美观的表格:

from prettytable import PrettyTable
import json

def get_list(dct):
    table = PrettyTable()
    for column in dct[0].keys():
        table.add_column(column, [])
    for item in dct:
        table.add_row(list(item.values()))
    # 生成Markdown格式的表格
    return table.get_string(format="markdown")

async def on_message(message):
    if message.content.startswith('$LIST ToPlay'):
        with open('GameListData.json', 'r+') as file:
            data = json.load(file)
            msg = get_list(data['ToPlay'])
            await message.channel.send(msg)

注意点

  • 若用Markdown方案,要确保表格内容里没有|等特殊字符,避免破坏Markdown语法;
  • 代码块方案兼容性更强,不管内容有没有特殊字符,都能保证对齐效果。

内容的提问来源于stack exchange,提问作者Eric S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:27:30