使用格式方法格式化ASCII转义序列

时间:2016-11-03 02:30:26

标签: python python-3.x colors format

您好我正在尝试使用ASCII Escape序列很好地格式化带有颜色的表格,但是当我应用颜色时,格式化方法不会格式化字符串,导致表格不对齐。格式方法在应用颜色ASCII转义序列后是否格式化字符串是否有原因?另外,是否有更好的方法来应用文本着色(注意,我无法在此系统上安装Coloroma或任何其他模块)?

以下是可用于演示此问题的可测试代码。

代码:

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'

    def disable(self):
        self.HEADER = ''
        self.OKBLUE = ''
        self.OKGREEN = ''
        self.WARNING = ''
        self.FAIL = ''
        self.ENDC = ''


def pass_fail(color, string):
    if color == 'red':
        return bcolors.FAIL + string + bcolors.ENDC
    elif color == 'green':
        return bcolors.OKGREEN + string + bcolors.ENDC
    elif color == 'yellow':
        return bcolors.WARNING + string + bcolors.ENDC

print('\n')
line_sep = '\t+' + ('-' * 57) + '+'
format_table = line_sep + '\n' + '\t| {:<42} | {:^10} |'

Critical = 100
Major = 200
Minor = 10

print('')
print(format_table.format('Number of Critical Issues Are: ', str(Critical)))
print(format_table.format('Number of Major Issues Are: ',  str(Major)))
print(format_table.format('Number of Minor Issues Are: ', (Minor)))
print(line_sep)


print('')
print(format_table.format('Number of Critical Issues Are: ', pass_fail('green', str(Critical))))
print(format_table.format('Number of Major Issues Are: ',  pass_fail('red', str(Major))))
print(format_table.format('Number of Minor Issues Are: ', pass_fail('yellow', str(Minor))))
print(line_sep)

没有正确格式化的第一个输出:

+---------------------------------------------------------+
| Number of Critical Issues Are:             |    100     |
+---------------------------------------------------------+
| Number of Major Issues Are:                |    200     |
+---------------------------------------------------------+
| Number of Minor Issues Are:                |     10     |
+---------------------------------------------------------+

未应用具有颜色格式的第二个输出:

+---------------------------------------------------------+
| Number of Critical Issues Are:             | 100 |
+---------------------------------------------------------+
| Number of Major Issues Are:                | 200 |
+---------------------------------------------------------+
| Number of Minor Issues Are:                | 10 |
+---------------------------------------------------------+

1 个答案:

答案 0 :(得分:1)

字符串format方法确实格式化了字符串,但在确定填充时,它在字符串长度计数中包含了所有 ANSI Color Escape 字符。

要查看此内容:len(pass_fail('yellow', str(Minor)))

此问题的解决方案是重写字符串格式,以便 ANSI颜色代码字符不会欺骗格式化程序。您可能必须通过手动调整列宽来执行此操作。