使用Python在 Linux 终端中格式化文本
本文演示了如何使用Python编程语言在Linux 终端中打印格式化文本。
与纯文本相比,格式化文本(也称为样式文本或富文本)具有如下样式信息:
- 颜色(文本颜色,背景颜色),
- 样式(粗体或斜体),
- 以及其他一些特殊功能,如删除线文本、下划线文本、超链接等。
在 Linux 终端中, ANSI 转义码(或转义序列)用于控制格式、颜色和其他输出选项。
为了编码这种格式信息,某些字节序列被嵌入到文本中,终端查找并解释为命令并执行它们。
让我们通过一个简单的Python打印语句来完成一个打印格式化文本的基本示例!
print('\x1b[3;31;43m' + 'Hello world!' + '\x1b[0m')
如果您在 Linux 终端上运行此代码,您将获得如下输出:
如您所见,输出具有:
- 文字颜色(前景色):红色
- 背景颜色:黄色
- 文字样式:斜体
现在,让我们试着理解上面打印语句中使用的 ANSI 转义码的含义。
- 使用的第一个 ANSI 转义码是:
\x1b[3;31;43m
这段代码的一般语法是:
\x1b[A;B;C
这里,
- A :文本格式样式。它可以取 1 到 9 之间的任何值。
Value Style 1 bold 2 faint 3 italic 4 underline 5 blinking 6 fast blinking 7 reverse 8 hide 9 strikethrough - B :文本颜色或前景色。它可以采用 30-37 的任何值形式。
- C :背景颜色。它可以采用 40-47 的任何值形式。
B(for text) C(for background) Color 30 40 black 31 41 red 32 42 green 33 43 yellow 34 44 blue 35 45 magenta 36 46 cyan 37 47 white
- A :文本格式样式。它可以取 1 到 9 之间的任何值。
- 最后,我们使用这个 ANSI 转义码:
\x1b[0m
这是用于将颜色/样式更改重置为默认值的代码。
现在,我们在Python中创建一个类来系统地实现所需的格式!
# A python class definition for printing formatted text on terminal.
# Initialize TextFormatter object like this:
# >>> cprint = TextFormatter()
#
# Configure formatting style using .cfg method:
# >>> cprint.cfg('r', 'y', 'i')
# Argument 1: foreground(text) color
# Argument 2: background color
# Argument 3: text style
#
# Print formatted text using .out method:
# >>> cprint.out("Hello, world!")
#
# Reset to default settings using .reset method:
# >>> cprint.reset()
class TextFormatter:
COLORCODE = {
'k': 0, # black
'r': 1, # red
'g': 2, # green
'y': 3, # yellow
'b': 4, # blue
'm': 5, # magenta
'c': 6, # cyan
'w': 7 # white
}
FORMATCODE = {
'b': 1, # bold
'f': 2, # faint
'i': 3, # italic
'u': 4, # underline
'x': 5, # blinking
'y': 6, # fast blinking
'r': 7, # reverse
'h': 8, # hide
's': 9, # strikethrough
}
# constructor
def __init__(self):
self.reset()
# function to reset properties
def reset(self):
# properties as dictionary
self.prop = { 'st': None, 'fg': None, 'bg': None }
return self
# function to configure properties
def cfg(self, fg, bg=None, st=None):
# reset and set all properties
return self.reset().st(st).fg(fg).bg(bg)
# set text style
def st(self, st):
if st in self.FORMATCODE.keys():
self.prop['st'] = self.FORMATCODE[st]
return self
# set foreground color
def fg(self, fg):
if fg in self.COLORCODE.keys():
self.prop['fg'] = 30 + self.COLORCODE[fg]
return self
# set background color
def bg(self,bg):
if bg in self.COLORCODE.keys():
self.prop['bg'] = 40 + self.COLORCODE[bg]
return self
# formatting function
def format(self, string):
w = [self.prop['st'],self.prop['fg'], self.prop['bg']]
w = [ str(x) for x in w if x is not None ]
# return formatted string
return '\x1b[%sm%s\x1b[0m' % (';'.join(w), string) if w else string
# output formatted string
def out(self, string):
print(self.format(string))
这是我们的文本格式化程序的类定义。
为了使用它,将上面的Python脚本保存为TextFormatter.py并在存储该文件的同一文件夹中打开终端。
然后,通过终端运行Python解释器并导入TextFormatter 。
下面给出的是示例运行的屏幕截图:
这里,
- 我们使用以下方法从TextFormatter模块导入TextFormatter类:
from TextFormatter import TextFormatter
- 然后,使用以下方法创建TextFormatter类的对象:
cprint = TextFormatter()
- 使用cprint.cfg方法配置文本格式。这里,参数 1 是文本颜色,参数 2 是背景颜色,参数 3 是文本样式。
cprint.cfg('y', 'g', 'b')
- 现在,只需使用cprint.out方法打印任何语句,如下所示:
cprint.out("Hello, world!")
所以,现在,您可以轻松地在终端上打印样式文本!