gpt4 book ai didi

python - 使用默认等宽字体在终端窗口中对齐 unicode 文本

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:15 25 4
gpt4 key购买 nike

我正在从网络中提取数据,并希望将其与终端窗口中的表格对齐。在大多数情况下,我可以很好地对齐文本,但是当文本包含某些符号或外来字符时,事情就会变得困惑。我该如何处理这些字符?这是第三行输出问题的示例:

>>> items = "Apple tree", "Banana plant", "Orange 으르", "Goodbye"
>>> values = 100, 200, 300, 400
>>> for i, v in zip(items, values):
... print "%-15s : %-4s" % (i, v)
...
Apple tree : 100
Banana plant : 200
Orange 으르 : 300
Goodbye : 400
>>>

注意:我正确引用了所有项目。 “Orange”右引号在 Stack Overflow 上显示不正确,但在终端窗口中显示正常。

更新:我已经为这个问题添加了赏金。我正在寻找一种无需过多额外代码且无需使用外部库即可实现的解决方案。它也应该与 python 2.7+ 和 3.x 一起工作(测试版本和应用不同修复的条件就可以了)。此外,它不应该需要任何额外的系统配置或更改字体或更改标准 Debian/Ubuntu 安装的任何终端设置。

最佳答案

这些特定字符的特殊行为可以使用 East Asian width 来识别来自其 Unicode 数据的属性。采纳来自 Programmatically tell if a Unicode character takes up more than one character space in a terminal 的建议并使用该值进行对齐:

#!/usr/bin/python3

import unicodedata

items = "Apple tree", "Banana plant", "Orange 으르", "Goodbye"
values = 100, 200, 300, 400
for i, v in zip(items, values):
eawid = len(i) + sum(1 for v in i if unicodedata.east_asian_width(v) == 'W')
pad = ' ' * (15 - eawid)
print("%s%s : %-4s" % (i, pad, v))

给出:

Apple tree      : 100 
Banana plant : 200
Orange 으르 : 300
Goodbye : 400

如果您的浏览器为这些字符使用 1.5 宽度的字形,这可能会出现错位;在我的终端中,plan으르 的宽度完全相同。

此处的语法是 Python 3,但同样的技术适用于 2.7。

关于python - 使用默认等宽字体在终端窗口中对齐 unicode 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21716680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com