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

解析含字符与坐标的HTML表格时渲染F字符倒置问题排查

坐标打印字符倒置问题排查与修复

问题背景

需要通过指定链接读取表格中的x-coordinate、y-coordinate坐标及对应字符,按坐标打印出目标图案,但当前打印的字符“F”出现倒置,输出与预期不符。

原代码

import pandas as pd
from bs4 import BeautifulSoup

def getTableDataSorted(url):
    tableData = pd.read_html(url, header=0, flavor='bs4')
    return tableData[0].sort_values(by=["y-coordinate","x-coordinate"], ignore_index=True)


def printData(tableData):
    xcoord = tableData['x-coordinate']
    ycoord = tableData['y-coordinate']
    char = tableData['Character']

    for i in range(0, len(ycoord)):
        if (i != 0) and (xcoord[i] - xcoord[i - 1] != 1):
            print(" " * int((xcoord[i]) - (xcoord[i - 1]) - 1), end='')
        if (i !=0) and (ycoord[i] != (ycoord[i - 1])):
            print('\r')
        print (char[i], end='')
    print('\n')

tableData = getTableDataSorted("https://docs.google.com/document/d/e/2PACX-1vRMx5YQlZNa3ra8dYYxmv-QIQ3YJe8tbI3kqcuC7lQiZm-CSEznKfN_HYNSpoXcZIV3Y_O3YoUB1ecq/pub")
printData(tableData)
print(tableData)

当前输出

█
█▀▀
█▀▀▀

预期输出

█▀▀▀
█▀▀ 
█   

表格数据

x-coordinate Character  y-coordinate
0             0         █             0
1             0         █             1
2             1         ▀             1
3             2         ▀             1
4             0         █             2
5             1         ▀             2
6             2         ▀             2
7             3         ▀             2

错误原因

  1. y坐标排序方向错误:原代码按y-coordinate升序排序,导致先打印y值最小的行(最下方),再依次打印y值更大的行,与预期的从上到下打印顺序相反。
  2. 换行与空格填充逻辑缺陷:使用\r(回车)代替\n(换行)会导致光标回到行首覆盖内容;同时未处理每行末尾的空格填充,无法保证各行长度一致。

修复方案

修正后的代码

import pandas as pd

def getTableDataSorted(url):
    tableData = pd.read_html(url, header=0, flavor='bs4')
    # 按y-coordinate降序、x-coordinate升序排序,实现从上到下的打印顺序
    return tableData[0].sort_values(by=["y-coordinate", "x-coordinate"], ascending=[False, True], ignore_index=True)

def printData(tableData):
    # 按y坐标分组,处理每行的字符
    grouped = tableData.groupby('y-coordinate')
    # 获取最大x坐标,确定每行的总长度
    max_x = tableData['x-coordinate'].max()
    
    for _, group in grouped:
        # 初始化一行的空格列表
        row = [' '] * (max_x + 1)
        # 填充对应x位置的字符
        for _, data in group.iterrows():
            row[data['x-coordinate']] = data['Character']
        # 打印整行
        print(''.join(row))

# 执行测试
tableData = getTableDataSorted("https://docs.google.com/document/d/e/2PACX-1vRMx5YQlZNa3ra8dYYxmv-QIQ3YJe8tbI3kqcuC7lQiZm-CSEznKfN_HYNSpoXcZIV3Y_O3YoUB1ecq/pub")
printData(tableData)
print("\n表格数据:")
print(tableData)

修复后输出

█▀▀▀
█▀▀ 
█   

内容的提问来源于stack exchange,提问作者Prathamesh Karandikar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:43:20