在Python3中打印包含英语和日语文本的右对齐表列

2024-09-25 18:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由英文和日文字符组成的专栏,我需要以正确的方式打印该专栏。你知道吗

这是我要打印的专栏:

column = ["通常残業時間", "bbbbbbbbb", "tttt"]

通常的方法是获得字符串的最大长度并进行相应的调整,但问题是文本也是日语的,而且日语字符的宽度比英语字符的宽度大。在这种情况下,我应该如何比较字符串长度并相应地打印?你知道吗

这是所需的输出:

通常残業時間
 bbbbbbbbb
      tttt

我在Python3号工作。你知道吗


Tags: 方法字符串文本宽度方式情况column字符
3条回答

可以对column的最后两项使用r.just

column = ["通常残業時間", "bbbbbbbbb", "tttt"]

for idx, item in enumerate(column):
    if not idx:
        print(item)
    else:
        print(item.rjust(12))
通常残業時間
 bbbbbbbbb
      tttt

问题是日文字符的宽度比英文字符宽一点,还有空格

这种情况有解决办法。你只需要计算这两种语言的宽度。你知道吗

columns = ["通常残業時間", "bbbbbbbbb", "tttt"]
for i in column:
    print('|'.join(list(i)))

你可以得到这样的东西。你知道吗

通|常|残|業|時|間
b|b|b|b|b|b|b|b|b
t|t|t|t

您可以使用|来找到宽度的关系。 在这里,我想,5个日语字符几乎等于9个英语字符(别忘了减去|

当你得到宽度关系。你知道吗

那么我想你可能知道如何计算他们应该适合的长度。你知道吗


抱歉,以上错误或误导性的建议。我意识到除非你找到一个不同宽度的空间来容纳不同的语言字符,否则你无法使它对齐。你知道吗

但我想我可能会发现一些相关的问题和一些有用的包装。你知道吗

Display width of unicode strings in Python [duplicate]

kitchen.text.display.textual_width 只是为了Python2.7可悲。。。你知道吗

似乎汉字(和中文)的长度是ascii的两倍。你知道吗

因此,我将使用.encode('ascii')UnicodeEncodeError来检查一行是否是ascii。(根据这里的答案:https://stackoverflow.com/a/196391/837627

如果是ascii,我们需要在行前面有更多的空格。你知道吗

这里有一个解决方案:

words = ["hhhh", "你你你你你你"]
max_length = 0

# Find the max length string in the array
# For kanji strings, the max length is doubled
for line in words:
    line_length = 0
    try:
        line.encode('ascii')
    except UnicodeEncodeError:
        line_length = 2 * len(line)
    else:
        line_length = len(line)
    if max_length < line_length:
        max_length = line_length

# Find the number of spaces to add by subtracting max line length by length of current line
# If current line is kanji, it is twice a ascii string length
for line in words:
    space = 0
    try:
        line.encode('ascii')
    except UnicodeEncodeError:
        space = max_length - (len(line)*2)
    else:
        space = max_length - len(line)
    print((' ')*space + line)

输出:

        hhhh
你你你你你你

第一行是4个ascii字符长。第二行是6个汉字长==12个ascii字符长。所以第一行前面需要12-4=8个空格(MONOSPACE!!!)。它在StackOverflow中看起来不正确,但在terminal中,它将由于单空格字体而对齐。你知道吗

顺便说一句,我用Python3写了这个解决方案。你知道吗

相关问题 更多 >