📜  使用Python在 Linux 终端中格式化文本

📅  最后修改于: 2022-05-13 01:55:08.866000             🧑  作者: Mango

使用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 之间的任何值。
      ValueStyle
      1bold
      2faint
      3italic
      4underline
      5blinking
      6fast blinking
      7reverse
      8hide
      9strikethrough
    • B :文本颜色或前景色。它可以采用 30-37 的任何值形式。
    • C :背景颜色。它可以采用 40-47 的任何值形式。
      B(for text)C(for background)Color
      3040black
      3141red
      3242green
      3343yellow
      3444blue
      3545magenta
      3646cyan
      3747white
  • 最后,我们使用这个 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!")

所以,现在,您可以轻松地在终端上打印样式文本!