解析含字符与坐标的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
错误原因
- y坐标排序方向错误:原代码按
y-coordinate升序排序,导致先打印y值最小的行(最下方),再依次打印y值更大的行,与预期的从上到下打印顺序相反。 - 换行与空格填充逻辑缺陷:使用
\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
相关产品推荐
相关产品推荐

