繁体   English   中英

python彩色文本而不修改字符串

[英]python colored text without modifying the string

我有一个python字符串:

my_string = 'thisisjustadummystringfortestingpurposes'

我想用红色打印字符串的某些区域,所以我使用ANSI转义码:

  • 红色:“ \\ x1b [31m”
  • 黑色:“ \\ x1b [0m”

然后,我要做的是,创建一个插入了ANSI代码的新字符串。

例:

my_color_seq = seq[:5]       # 0:5 will be black
my_color_seq += '\x1b[31m'   # start red
my_color_seq += seq[5:10]    # 5:10 will be red
my_color_seq += '\x1b[0m'    # start black
my_color_seq += seq[10:]     # 10: will be black

print(my_color_seq)

该代码可以正常工作并正确打印5:10红色区域。 我什至创建了一个循环,在其中可以为要用红色着色的区域使用索引和长度的列表。

现在的问题是,在我的彩色字符串中包含不可见的字符(ANSI代码),因此字符的索引不再像原来那样。

想象一下,我现在想通过将其他一些片段绘制成蓝色来再次处理彩色字符串。 我不再信任索引,因为我的字符串现在比看起来更大。

当然,我可以更新索引以指向新字符串中的正确位置,但是我只是想知道是否有更简单的方法来做到这一点。

您可以对字符串颜色进行包装,并在保持原始字符串不变的情况下打印返回的值:

在示例中未显示,但是您可以对原始字符串进行切片,以使用适当的kwarg值有选择地将子字符串传递给包装器,然后将返回的值重新组装为可以进一步处理或打印的新字符串。

def colorize(token, bold_and_al='', fg_color='', bg_color=''):
    prefix = '\x1b['
    suffix = 'm'
    reset = '\x1b[0m'

    return '\x1b[' + bold_and_al + ";" + fg_color + ";" + bg_color + "m" + token + reset


a = 'thisisjustadummystringfortestingpurposes'
print(colorize(a, bold_and_al='1', fg_color='34', bg_color='42'))

编辑:

在注释中添加@MadPhysicist提出的示例,以说明如何使用colorize包装器。

print(''.join([colorize(a[:5], bold_and_al='1', fg_color='34', bg_color='42'), a[5:10], colorize(a[10:], bold_and_al='1', fg_color='32', bg_color='44')]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM