我正在尝试使用
tabulate
将表情符号打印为表格,但没有获得正确的对齐方式。我该如何解决这个问题?
emojis = [['🍌', '🥕', '🥕', '🍎', '🍌', '🍎', '🦸'],
['🍌', '🍎', '🚫', '🚫', '🍎', '🚫', '🍎'],
['🥑', '🍎', '🥕', '🚫', '🚫', '🥑', '🚫'],
['🥕', '🍎', '🥑', '🚫', '🍎', '🍎', '🥕'],
['🥕', '🍌', '🚫', '🍎', '🥕', '🥕', '🍌'],
['🚫', '🍎', '🥕', '🥑', '🥕', '🥕', '🍌'],
['🧛', '🥑', '🚫', '🍎', '🥕', '🚫', '🥕']]
print(tabulate(emojis, tablefmt="fancy_grid"))
这是输出:
╒═══╤═══╤═══╤═══╤═══╤═══╤═══╕
│ 🍌 │ 🥕 │ 🥕 │ 🍎 │ 🍌 │ 🍎 │ 🦸 │
├───┼───┼───┼───┼───┼───┼───┤
│ 🍌 │ 🍎 │ 🚫 │ 🚫 │ 🍎 │ 🚫 │ 🍎 │
├───┼───┼───┼───┼───┼───┼───┤
│ 🥑 │ 🍎 │ 🥕 │ 🚫 │ 🚫 │ 🥑 │ 🚫 │
├───┼───┼───┼───┼───┼───┼───┤
│ 🥕 │ 🍎 │ 🥑 │ 🚫 │ 🍎 │ 🍎 │ 🥕 │
├───┼───┼───┼───┼───┼───┼───┤
│ 🥕 │ 🍌 │ 🚫 │ 🍎 │ 🥕 │ 🥕 │ 🍌 │
├───┼───┼───┼───┼───┼───┼───┤
│ 🚫 │ 🍎 │ 🥕 │ 🥑 │ 🥕 │ 🥕 │ 🍌 │
├───┼───┼───┼───┼───┼───┼───┤
│ 🧛 │ 🥑 │ 🚫 │ 🍎 │ 🥕 │ 🚫 │ 🥕 │
╘═══╧═══╧═══╧═══╧═══╧═══╧═══╛
我相信目前没有解决方案,因为正如评论中所暗示的那样,每个操作系统/终端/字体呈现表情符号的方式都不同(请参见下面的示例)。如果您的应用程序允许,我的建议是将其导出为 SVG/HTML/Markdown/等,这会在渲染时强制严格的列边界,例如
print(tabulate(emojis, tablefmt="html"))
<table>
<tbody>
<tr><td>🍌</td><td>🥕</td><td>🥕</td><td>🍎</td><td>🍌</td><td>🍎</td><td>🦸</td></tr>
<tr><td>🍌</td><td>🍎</td><td>🚫</td><td>🚫</td><td>🍎</td><td>🚫</td><td>🍎</td></tr>
<tr><td>🥑</td><td>🍎</td><td>🥕</td><td>🚫</td><td>🚫</td><td>🥑</td><td>🚫</td></tr>
<tr><td>🥕</td><td>🍎</td><td>🥑</td><td>🚫</td><td>🍎</td><td>🍎</td><td>🥕</td></tr>
<tr><td>🥕</td><td>🍌</td><td>🚫</td><td>🍎</td><td>🥕</td><td>🥕</td><td>🍌</td></tr>
<tr><td>🚫</td><td>🍎</td><td>🥕</td><td>🥑</td><td>🥕</td><td>🥕</td><td>🍌</td></tr>
<tr><td>🧛</td><td>🥑</td><td>🚫</td><td>🍎</td><td>🥕</td><td>🚫</td><td>🥕</td></tr>
</tbody>
</table>